Large

Google Translator Portuguese Mod

By erikspen Last update Nov 23, 2012 — Installed 1,143 times.

There are 51 previous versions of this script.

Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)

// ==UserScript==
// @name           Google Translator Portuguese Mod
// @namespace      erikspen
// @description    Translates selected text into a tooltip with other websites available
// @include        http://*
// @include        https://*
// @include        file:///*
// @source         http://userscripts.org/scripts/show/132506
// @version        2.1
// ==/UserScript==
//Based on the script https://userscripts.org/scripts/show/36898 and Pier's Mod
//Many thanks to the original authors

const HREF_NO = 'javascript:void(0)';
var imgLookup, txtSel, currentURL, languagesGoogle, opentab=0;
var results_history=[];
var results_history_idx = -1;
var initialized = false;

//setup events
document.addEventListener('mouseup', showLookupIcon, false);
document.addEventListener('mousedown', mousedownCleaning, false);

//parsing of url's similar to GoldenDic's usage of GDWORD & GDISO1 (RFC2396) w/ additional GDLANG1 ("from" language) and GDLANG2 ("to" language)
//to allow swapping between the source/target. Also specified is the default substitution for the SPACE character in the query string.
var websites = [
		{name:'Google', ref:'Google|#|http://translate.google.com.br/translate_t?text=GDWORD&langpair=GDLNG1|GDLNG2|#|pt|#|en|#|+',
		 icon:'data:image/gif;base64,R0lGODlhFAAUANUAANbW1p+fn56enpqamtPT08/Pz7a2tqysrJmZmbi4uJycnNjY2Kqqqpubm8PDw9ra2tHR0dvb26mpqcHBwcDAwMbGxrm5ub+/v8XFxc3NzcfHx52dna2trcTExMzMzNnZ2d/f3+Dg4LKystfX16CgoJiYmOHh4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAUABQAAAZrQJNwSCwaj8ikcslUehglxAHSNJSu2MvSURpQFoDEtaAklTBEMSf5iIKIgJIi+Sk1QsRFVykoZYgTJRJKFiUBZCYaAyUVSQABWBsNVyKOkAIGClcBHZYlAgRCIwBLB5+hTUIRDKiprq+wSkEAOw==',
		 elefilter:'.//span[@class="short_text"]', //will find the first instance of specified
		 wrapper:'div',//results of elefilter are placed in this wrapper
		 elehidefilter:'',//separate multiple hide filters with #20 and replace spaces with %20
		 no_result:'',//element to show when elefilter fails (optional)
		 related:''},//related websites (parsed with spaces)

		{name:'Examples', ref:'Glosbe|#|http://en.glosbe.com/GDLNG1/GDLNG2/GDWORD|#|pt|#|en|#|+',
		 icon:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFDRjVBNTUwOTczMTFFMTlDNkJDQzI1NTU4RTlEMTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTFDRjVBNTYwOTczMTFFMTlDNkJDQzI1NTU4RTlEMTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MUNGNUE1MzA5NzMxMUUxOUM2QkNDMjU1NThFOUQxOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5MUNGNUE1NDA5NzMxMUUxOUM2QkNDMjU1NThFOUQxOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiRpPLwAAAKBSURBVHjajFNNSBtBFP5mdjfNWjWKKP6VkkIVjD1VLIFKYuil9CI0pJfkYInQmGrBU6EXrYV6MBbxJO3JHrUFEXq110JPvVgo9kcoTUSSJtlkk93sbmdGklorpR/7eMx7b773M28JGDo7O5+qqvqwVqvhJJgNbrcbuVwOp3F0dHTPMIx1wg9erzcTDoe76oGO4wg5C9yuaRonwO7uLqHcSAih1WpVOLiUSiWUy2VEo1GhT4qu63BsW2iXy3VRZvebbdtWK5UKIpEIent7BcHa2hrGx8extLR0ZiU8IUMfJxjp6OggnODZygpGR0cRn5qCREVxSKVS2Nvbg2kYCDLCTCaDB7OzdYIrnOCyx+NRisUiEtPT8Pv9UBQFleMAzM/PY2FhAYODg8JXBxsgV5d4mn5ZViRNKyEUCuH+zAwsy0L1OADfDg7Qw9ra399HMBhEgSXiQiWJuwc4wUBLSzPV9TJ2dnbwZHGRDwdN7An5QF9tbeHlxgYmJycxzSpMLS9DYwS+oSFks9kJ3oIqMTY+uGQyie7u7kaZPp/vj8HxCjji8TgSiYRojRP01MwaioWCcKbTafwLw8PDiMVi2NzcxOrqqrB9jEVjDqX0vyUQCAjNKneILMvv2RZe5Uuyvb3dyHR9bAye1lbxIo3NFN/vDeWDJW1tbXP5fD7JF7LukGXaQmSp3ayY39nROt2Gck7psy2rSIn0qHHpRsTfbBq1x6Zh3pZd8h31vKtw+mLxp/7csuwvapN77u3rd4ci2Qm/V5LoLcNx2sua/oLJXwMkBF2UShdYNyPs+KZBEJgYkVnWu7nD/I9sunDz04evn896gVD4Wj/7b9Ydx47VCX4JMACz7y1KPVizUQAAAABJRU5ErkJggg==',
		 title:'Examples of Human-Translated Sentences',
		 elefilter:'.//table[@class="tranlastionMemory"]',
		 wrapper:'table',
		 elehidefilter:'.//div[@class="source"]',
		 no_result:'.//nav',
		 related:'Linguee|#|http://www.linguee.com.br/portugues-ingles/search?source=auto&query=GDISO1'+
					'|#|pt|#|en|#|%20'+//substitution for GDLNG1/2 (portuguese), and GDLNG1/2 (english), and sub for the space character in the URL
					'|#|table|#|.//table[@class="result_table%20withquestions"]'+//wrapper, and elefilter
					'|#|.//td[@class="col_rating"]#20.//div[@class="source_url"]#20.//div[@class="source_url_spacer"]'+//elehidefilter
					'|#|.//no[@id="more"] '+//no_result
				'LingueePhrases|#|http://www.linguee.com.br/portugues-ingles/search?source=auto&query=GDISO1'+
					'|#|pt|#|en|#|%20'+
					'|#|table|#|.//div[@id="dictExamples"]'+
					'|#|.//td[@class="col_rating"]#20.//div[@class="source_url"]#20.//div[@class="source_url_spacer"]'+
					'|#|.//no[@id="more"] '+
				'GlosbePhrases|#|http://en.glosbe.com/GDLNG1/GDLNG2/GDWORD'+
					'|#|pt|#|en|#|%20'+
					'|#|div|#|.//div[@class="similarPhrasesContainer"]'+
					'|#|.//no[@id="more"]'+
					'|#|.//nav '+
				'babLa|#|http://pt.bab.la/dicionario/GDLNG1-GDLNG2/GDWORD'+
					'|#|portugues|#|ingles|#|-'+
					'|#|table|#|.//section[@class="section-block"][1]'+
					'|#|.//a[@class="tooltipLink"]#20.//ul[@class="nav%20result-entry-menu%20pull-right"]'+
					'|#|.//div[@class="babL"] '+
				'bablaPhrases|#|http://pt.bab.la/dicionario/GDLNG1-GDLNG2/GDWORD'+
					'|#|portugues|#|ingles|#|-'+
					'|#|table|#|.//section[@class="section-block"][3]'+
					'|#|.//a[@class="tooltipLink"]#20.//ul[@class="nav%20result-entry-menu%20pull-right"]'+
					'|#|.//section[@class="section-block"][2] '+
				'Tatoeba|#|http://tatoeba.org/eng/sentences/search?query=GDWORD&from=GDLNG1&to=GDLNG2'+
					'|#|por|#|eng|#|+'+
					'|#|table|#|.//div[@id="main_content"]'+
					'|#|.//div[@class="addTranslations"]#20.//ul[@class="menu"] '+
				//Working, but rarely gives good results
				//'MyMemory|#|http://mymemory.translated.net/s.php?q=GDWORD&sl=GDLNG1&tl=GDLNG2&sj=all'+
				//	'|#|pt-PT|#|en-GB|#|+'+
				//	'|#|table|#|.//span[@id="results2"][1]'+
				//	'|#|.//td[@class="dtl"]#20.//a[@class="ice"]#20.//span[@class="source"] '+
				'COMPARA|#|http://www.linguateca.pt/COMPARA/processa_pesquisa.php?simples=sim&concordancia=on&ps_palavra_port=%22GDISO1%22&accao=Pesquisar+de+GDLNG1+para+GDLNG2&ps_palavra_ing=%22GDISO1%22'+
					'|#|portugu%EAs|#|ingl%EAs|#|%22+%22'+
					'|#|table|#|.//table[@class="datatable"]'+
					'|#|.//td[@class="textdatatdsearch"] '+
				'FrazeIt|#|http://fraze.it/n_search.jsp?q=GDWORD&l=GDLNG1&t=0&sugg=off'+
					'|#|9|#||#|+'+
					'|#|div|#|.//div[@class="results"][1]'+
					'|#|.//div[@class="author"] '+
				'Informal_Ex|#|http://www.dicionarioinformal.com.br/exemplos/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|table|#|.//td[@class="conteudo"]//table'+
					'|#|.//div[@class="votacao_definicao"]#20.//span[@class="subDefinicao"]#20.//p[@class="subTitulo"]#20.//div[@class="compartilhar"]#20.//div[@class="subTitulo"] '+
				'Google_Search_All|#|https://www.google.com.br/search?q=site%3Awww.linguee.com.br%2Fportugues-ingles+OR+site%3Aen.glosbe.com%2Fpt%2Fen+OR+site%3Apt.bab.la%2Fdicionario%2Fportugues-ingles+OR+site%3Atatoeba.org+OR+site%3Awww.wordreference.com%2Fpten+OR+site%3Amichaelis.uol.com.br%2Fmoderno%2Fingles+OR+site%3Awww.infopedia.pt%2Fportugues-ingles+OR+site%3Awww.dicionarioinformal.com.br+OR+site%3Awww.infopedia.pt%2Flingua-portuguesa+OR+site%3Awww.englishexperts.com.br%2Fforum%2Fcomo+OR+site%3Awww.priberam.pt+OR+site%3Awww.dicio.com.br+OR+site%3Awww.expressoesidiomaticas.com.br%2Fidiomaticas%2Flinguas_2_ingles+OR+site%3Awww.woxikon.com%2Fenglish-portuguese+OR+site%3Awww.estraviz.org+OR+site%3Ahttp%3A%2F%2Fwww.webdicionario.com+OR+site%3Adicionarioweb.com.br+OR+site%3Apt.wikipedia.org%2Fwiki+OR+site%3Aaulete.uol.com.br%2Fsite.php%3Fmdl%3Daulete_digital+GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@id="ires"]'+
					'|#|.//div[@class="esc%20slp"]#20.//button'},

		{name:'Translations', ref:'WordRef|#|http://www.wordreference.com/GDLNG1GDLNG2/GDWORD|#|pt|#|en|#|%20',
		 icon:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFDRjVBNTEwOTczMTFFMTlDNkJDQzI1NTU4RTlEMTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTFDRjVBNTIwOTczMTFFMTlDNkJDQzI1NTU4RTlEMTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MUNGNUE0RjA5NzMxMUUxOUM2QkNDMjU1NThFOUQxOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5MUNGNUE1MDA5NzMxMUUxOUM2QkNDMjU1NThFOUQxOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhURfS4AAAJsSURBVHjabFJNTBNBGH0zu+3WNoU0CAsISySoB4KJF8DEhohnzx64KAeuJk1UDJLGRg96MMjFv5iQSKKeTCQx8eAFAw1VTpyAEgQDUqAYKC273Z9xZktrm/IlszPf7Jv3vfneEMYYREQikVOyTAd8PuUuA1MpIdtHR/oDQoit+JSHjuOokkRTZt56qij+j9FoVBfniCAYGR0ep4QOhsN9Um/PZV8wGEQmk8HM7Hcjv7xC+2/e8gQCAWRzWczP/zTi8RnLsu23oyPR2+i7cGVt+P4dZts2K4ZYczA7PMywL/1X2WpyiaVSKbazs8NyuRyzLIs9ehxj4izleI3LBKUUxRCq8nkDvzfWsd3ShNWJCfArQNd1pNNpFyvLksBp7ilBUB6CoNAbBqunG7vvJrE6NlaBkWW5MIuPJEnVBA7jVfnsU9Dy/Bl+3RgA9ftxZnCwgoCWJyKEVJegQOXmXk1Dy9AQkrEYzJUVlBd1CSiVquQz5lSQhsJhwLaRm5s7ScFJBLz68RsR1/Gqqrs+XFysUFDVA7F2hxyCYeg413EenZ1dkE0LP/j/3DFBRRNFwr3HcnIJiUQCJrewtVVDd3cvLnZdQjw+i83NDYgyewsL3OJ8yblS916/eQG1sQHtHW0g3OeD/QN8nvrkAmtDNahvqMPf+nrovDfvP0y6BUsEmtaKsx3t8Ho9pavU1tagubnJBRaH/9U4nxnsuhDS23v/Cb6+nObfaXcjbxrYSq9nZMlDm063BcTen921rGWbTmOdFvR6lIo3Q/h73uIdV8v2DAJyj0u/5jDnumsVoVMc841784SnJQaOSf0TYACzdTy9abesMQAAAABJRU5ErkJggg==',
		 title:'Portuguese-English Dictionaries',
		 elefilter:'.//div[@id="articleWRD"]',
		 wrapper:'table',
		 elehidefilter:'.//a[@title="Report%20an%20error"] .//p[@class="wrcopyright"]',
		 no_result:'.//li[@id="link"]',
		 related:'Michaelis|#|http://michaelis.uol.com.br/moderno/ingles/index.php?lingua=GDLNG1-GDLNG2&palavra=GDISO1'+
					'|#|portugues|#|ingles|#|%20'+
					'|#|div|#|.//div[@id="tdcontents"][1]'+
					'|#|.//no[@id=more] '+
				'Infopedia|#|http://www.infopedia.pt/GDLNG1-GDLNG2/GDWORD'+
					'|#|portugues|#|ingles|#|%20'+
					'|#|div|#|.//span[@class="dolEntradaVverbete"][1]'+
					'|#|.//a[@class="LinkVerMais"]'+
					'|#|.//div[@id="divartigo"] '+
				'PONS|#|http://en.pons.eu/dict/search/results/?q=GDWORD&l=enpt&in=&lf=GDLANG1'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@class="results"][1]'+
					'|#|.//ul[@class="options"]#20.//td//ul#20.//div[@class="acapela"] '+
				'Reverso|#|http://dictionary.reverso.net/GDLNG1-GDLNG2/GDWORD'+
					'|#|portuguese|#|english|#|+'+
					'|#|div|#|.//div[@class="ldcomIN"][1]'+
					'|#|.//span[@class="nbsp1"]'+
					'|#|.//div[@class="alink2"] '+
				//The following three are working, but rarely give good results
				//'SensAgent|#|http://tradutor.sensagent.com/GDWORD/GDLNG1-GDLNG2/'+
				//	'|#|pt|#|en|#|%20'+
				//	'|#|div|#|.//div[@class="divTranslations"]'+
				//	'|#|.//no[@id="more"]'+
				//	'|#|.//div[@class="divNotFound"] '+
				//'LangToLang|#|http://www.langtolang.com/?selectFrom=GDLNG1&selectTo=GDLNG2&txtLang=GDWORD'+
				//	'|#|portuguese_brazil|#|english|#|+'+
				//	'|#|table|#|.//div[@id="mainContent"]//table[last()-3]'+
				//	'|#|.//no[@id="more"] '+//'|#|.//div[@id="userSuggestion"]#20.//td[@id="imagesForWordPanel"] '+
				//'Woxikon|#|http://www.woxikon.com/english-portuguese/GDWORD.php'+
				//	'|#|pt|#|en|#|%20'+
				//	'|#|table|#|.//table[@class="translationsTable"][1]'+
				//	'|#|.//span[@style="float:%20right;"]'+
				//	'|#|.//div[@class="container%20default"] '+
				'EnglishExperts|#|https://www.google.com.br/search?q=site%3Awww.englishexperts.com.br%2Fforum%2Fcomo+GDWORD&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@id="ires"]'+
					'|#|.//div[@class="esc%20slp"]#20.//button '+
				'Book:Dic.of.Informal.BrPt|#|http://books.google.com.br/books?ei=aMCuT_7WB42EtgfZtbGICQ&hl=pt-BR&id=__n8tBKIO-IC&dq=portuguese+idioms&q=GDWORD#v=snippet&q=GDWORD&f=false'+
					'|#|pt|#|en|#|+'},
	 
		{name:'Portuguese', ref:'Aulete|#|http://aulete.uol.com.br/site.php?mdl=aulete_digital&op=loadVerbete&pesquisa=1&palavra=GDISO1|#|pt|#|en|#|+',
		 icon:'data:image/png;base64,R0lGODlhFAAMAOYAACqhSkRerhubSvjsFgaRThOPRhcytCmZSACKUGrDLazTIhI4xR+eQxOQThyWQRqVPhSaQ+33BiyeRPT5BCWeRh6aRQGOTTpOmqXSISKcRSSeSBOYSiCeQiafQwqORSCdSBiQTR2YQgSOTgqWSyKbRR2XPgGOSiGcRCaXSf//AT6lQIKFhh6iOcjpBjxk0SGNQg+ZSE9xxmh8d47JMBmbPQGRUMHfGyg+uIjPI0RgnSCaSC9ez3p/hACKTaiymBiXRxiSPUFjqHfJKRY30iScQx2bUSaZR9r3BP/3BHTKHmqDslaI1iRItjldtgCURyeTRAiRRJKon/fsBcfNMfLjMWG6Oo64u//0Eeb0CheSQOv1C4CkrxqZRuLgJEusOoDQH1ezNe/4B5PJJV9wkSidSy2bTClOzTNRwN7UKqfYGwCJS+TNKYuQZ9HSKbLdFL7dGzmmPu3nGSaiPMHjDjJSqFm6Kz9VpsjzBvr+BN/xESGcRiOcRiOeRCOfRx2XQP//ACH5BAAAAAAALAAAAAAUAAwAAAfogEAVfoSEJQUeHgUlhX4lIQ4hABoUFBoCNRAJQiwiG5SgGg8aJ3wVIiJ1d1cDeUkjFlwZs3oPFEQjanBpUmwXFzxoc2AIBBUZJw4CJjpiWH9RLjFNBgZdEwoSCDBGL0UzWil/bWZBSltWOzJ/fxEKHSFZHxgR7FNDdHYBQUs+fykTbACA8GAZGQxhUoxZwOTMghtU8LxRYWEDCVs6CPTw4gYJmxx2VqxpUcWCCAEnLmogsYeLBSgJjgyIE+ELBAQ/MhDZk+FBHwZAOcCwQCMJDjlORnAACvTEkzIHokZFAaIBCBAopGoNBAA7',
		 title:'Portuguese Dictionaries',
		 elefilter:'.//div[@id="definicao_verbete_homologado"]',
		 wrapper:'table',
		 elehidefilter:'.//textarea[@id="copy"] .//div[@style="float:%20right;"] .//div[@style="float:right;"]',
		 no_result:'',
		 related:'Infopedia|#|http://www.infopedia.pt/lingua-portuguesa/GDWORD'+
					'|#|pt|#|en|#|%20'+
					'|#|div|#|.//div[@class="dolDivisaoCatgram"][1]'+
					'|#|.//no[@id="more"]'+
					'|#|.//div[@id="divartigo"] '+
				'Informal|#|http://www.dicionarioinformal.com.br/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//td[@class="conteudo"][1]'+
					'|#|.//div[@class="votacao_definicao"]#20.//span[@class="subDefinicao"]#20.//p[@class="subTitulo"]#20.//div[@class="compartilhar"]#20.//div[@class="subTitulo"] '+
				'Priberam|#|http://www.priberam.pt/DLPO/default.aspx?pal=GDISO1'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//def'+
					'|#|.//no[@id="more"] '+
				'Michaelis|#|http://michaelis.uol.com.br/moderno/portugues/index.php?lingua=portugues-portugues&palavra=GDISO1'+
					'|#|portugues|#|ingles|#|%20'+
					'|#|div|#|.//div[@id="tdcontents"][1]'+
					'|#|.//no[@id=more] '+
				'Dicio|#|http://www.dicio.com.br/GDISO1'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//p[@id="significado"][1]'+
					'|#|.//no[@id="more"]'+
					'|#|.//p[@class="nao_encontrada"] '+
				'DicWeb|#|http://www.dicionarioweb.com.br/GDWORD.html'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@class="verbete"][1]'+
					'|#|.//no[@id="more"] '+
				'WebDic|#|http://www.webdicionario.com/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@class="list"][1]'+
					'|#|.//div[@class="info%20rounded-2"] '+
				'Estravis|#|http://www.estraviz.org/GDWORD'+
					'|#|pt|#|en|#|_'+
					'|#|div|#|.//div[@id="resultado"][1]'+
					'|#|.//span[@class="etimologia"] '+
				'DicExpressoes|#|http://www.dicionariodeexpressoes.com.br/pesquisa.do?textoBusca=GDISO1'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@class="post_body_single"][1]'+
					'|#|.//no[@id="more"] '+
				'Forvo_Pronunciation|#|http://pt.forvo.com/word/GDWORD/#pt'+
					'|#|pt|#|en|#|_'+
					'|#|ul|#|.//div[@class="mainword"]//div//div//ul[1]'+
					'|#|.//div[@class="second_line%20clearfix"]#20.//li[@class="could"]#20.//span[@class="lang_xx"]'+
					'|#|.//div[@class="error"]'},

		{name:'English', ref:'MacMillan|#|http://www.macmillandictionary.com/search/british/direct/?q=GDWORD|#|pt|#|en|#|-',
		 icon:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAflJREFUeNpinDRzn5qN3uFDt16+YWBg+Pv339+KGN0rbVP+//2rW5tf0Hfy/2+mr99+yKpyOl3Ydt8njEWIn8f9zj639NC7j78eP//8739GVUUhNUNuhl8//ysKeZrJ/v7z10Zb2PTQTIY1XZO2Xmfad+f7XgkXxuUrVB6cjPVXef78JyMjA8PFuwyX7gAZj97+T2e9o3d4BWNp84K1NzubTjAB3fH0+fv6N3qP/ir9bW6ozNQCijB8/8zw/TuQ7r4/ndvN5mZgkpPXiis3Pv34+ZPh5t23//79Rwehof/9/NDEgMrOXHvJcrllgpoRN8PFOwy/fzP8+gUlgZI/f/5xcPj/69e/37//AUX+/mXRkN555gsOG2xt/5hZQMwF4r9///75++f3nz8nr75gSms82jfvQnT6zqvXPjC8e/srJQHo9P9fvwNtAHmG4f8zZ6dDc3bIyM2LTNlsbtfM9OPHH3FhtqUz3eXX9H+cOy9ZMB2o6t/Pn0DHMPz/b+2wXGTvPlPGFxdcD+mZyjP8+8MUE6sa7a/xo6Pykn1s4zdzIZ6///8zMGpKM2pKAB0jqy4UE7/msKat6Jw5mafrsxNtWZ6/fjvNLW29qv25pQd///n+5+/fxDDVbcc//P/zx/36m5Ub9zL8+7t66yEROcHK7q5bldMBAgwADcRBCuVLfoEAAAAASUVORK5CYII=',
		 title:'English Dictionaries',
		 elefilter:'.//div[@class="HOMOGRAPH"]',
		 wrapper:'div',
		 elehidefilter:'.//div[@id="helplinks-box"] .//div[@id="relatedentries"] .//div[@class="HEAD-INFO2"] .//div[@class="headbar"] .//div[@class="thessnippet"]',
		 no_result:'.//div[@id="contentpanel"]',
		 related://'Longman|#|http://www.ldoceonline.com/dictionary/GDWORD'+
					//'|#|pt|#|en|#|%20'+
					//'|#|div|#|.//div[@class="Entry"][1]'+
					//'|#|.//table[@id="headword"]#20.//table[@class="toolbar"]#20.//div[@class="dictionary-results-title"]'+
					//'|#|.//div[@class="contentText"] '+
				'TheFreeDict|#|http://www.thefreedictionary.com/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@id="MainTxt"][1]'+
					'|#|.//no[@id="more"]'+
					'|#|.//td[@id="TDTotalBrowser"] '+
				'TheFreeDict-Idioms|#|http://idioms.thefreedictionary.com/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@id="MainTxt"][1]'+
					'|#|.//no[@id="more"]'+
					'|#|.//td[@id="TDTotalBrowser"] '+
				'Oxford|#|http://oxforddictionaries.com/definition/GDWORD?region=us&q=GDWORD'+ //will not always work!!!
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@id="mainContent"][1]'+
					'|#|.//no[@id="more"] '+
				'ozdic|#|http://www.ozdic.com/collocation-dictionary/GDWORD'+
					'|#|pt|#|en|#|%20'+
					'|#|div|#|.//div[@class="item"]'+
					'|#|.//no[@id="more"] '+
				'Webster|#|http://www.merriam-webster.com/dictionary/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@class="KonaBody"][1]'+
					'|#|.//div[@class="franklin-promo"]'+
					'|#|.//div[@class="spelling-help"] '+
				'Dictionary.com|#|http://dictionary.reference.com/browse/GDWORD?s=t'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@class="luna-Ent"][1]'+
					'|#|.//div[@id="fcrds"]#20.//div[@class="spl_unshd"]'+
					'|#|.//div[@class="nomlr"] '+
				'CambridgeUS|#|http://dictionary.cambridge.org/search/american-english/direct/?q=GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|span|#|.//span[@class="sense-body"][1]'+
					'|#|.//no[@id="more"]'+
					'|#|.//div[@id="cdo-spellcheck-container"] '+
				'Dictionarist|#|http://www.dictionarist.com/english-portuguese/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|table|#|.//table[@class="Header"]'+
					'|#|.//no[@id="more"] '+
				'Definr|#|http://definr.com/GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//div[@id="meaning"][1]'+
					'|#|.//no[@id="more"] '+
				'Hyper|#|http://www.hyperdictionary.com/search.aspx?define=GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|table|#|.//table//table//table[2]'+
					'|#|.//no[@id="more"] '+
				'Wordnik|#|http://www.wordnik.com/words/GDWORD'+
					'|#|pt|#|en|#|%20'+
					'|#|div|#|.//ol[@class="definitions"]'+
					'|#|.//no[@id="more"]'+
					'|#|.//div[@class="definitions%20empty%20module"] '+
				'UrbanDic|#|http://www.urbandictionary.com/define.php?term=GDWORD'+
					'|#|pt|#|en|#|+'+
					'|#|table|#|.//table[@id="entries"]'+
					'|#|.//td[@class="tools"]#20.//div[@class="greenery"]#20.//div[@class="zazzle_links"]'+
					'|#|.//div[@id="not_defined_yet"] '+
				'subzin|#|http://www.subzin.com/search.php?q=%22GDWORD%22'+
					'|#|pt|#|en|#|+'+
					'|#|div|#|.//ul//ul'+
					'|#|.//no[@id="more"] '+
				'ExpressoesIdiomaticas|#|http://www.expressoesidiomaticas.com.br/idiomaticas/linguas_2_ingles/GDWORD.htm'+
					'|#|pt|#|en|#|+'+
					'|#|table|#|.//table[@id="tbcFrases"][1]'+
					'|#|.//no[@id="more"] '+
				'Forvo_Pronunciation|#|http://pt.forvo.com/word/GDWORD/#en'+
					'|#|pt|#|en|#|_'+
					'|#|div|#|.//div[@class="mainword"]//div//div//ul[1]'+
					'|#|.//div[@class="second_line%20clearfix"]#20.//li[@class="could"]#20.//span[@class="lang_xx"]'+
					'|#|.//div[@class="error"]'},
		{name:'',
		 icon:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArRJREFUeNqUlTtMWmEUx/8XrvKQR2qwPgY1LiTtYNoNBw0oxi6GurmoiSExSrqUTRdbmXwNJcakg6Nb66A4NhriggyN0cVGxZiYiGBFUEGQfuc0mLag3J6EcMl3vh//87xSIpFAPB5/dXl5OZnNZm35fF6F/zBJkqBWq78bjcaPFovlm3RycvLi7OwsmMvlnun1enagTzqdxt3dHT+XMyGC/NI1NTVvZKHuA8F0Oh3W1tawubkJk8mE/v5+NDY2MlSJSgHVXFxcTMoiTDspW1lZwfj4ODtUVlbC5XJBq9Xy70wmU1YpnQthL1WCzJ6rq6t8IGRjeXkZDQ0N8Hq9ODo6QlVVFYelIHRJpm+iV1RU8MXFxUU0NzdjYGAAu7u72Nvbg9/vR1NTE1KpVDmleSkcDscErHp7e5uqBavViuHhYYYVrKWlBQsLC5zT6+vrp4BxBt7f31dTUejfh4aGEAqFijwJSkpJ/RPQuKqQ0NvbW0oqh0qh/2sHBwcYGRnhnFIRH8vpX01M1ezu7sb8/HxJ6PHxMcbGxhCJRB4tVNFUXF1doaOjA3NzczAYDEUXDg8PH6CllJYcM4La7XZMT0+Dclsq/MHBQVas0WjKA8loxh0OR0ml9fX1cLvd3K+yLCsDFpR2dnZiZmbmAVpXV4eJiQlMTU1xIXd2driHFQELSin82dlZHkWfz4fR0VE+6+npQTAYfBhRRcCC0vb2du7D9fV1eDwebGxsoLe3l/MZi8WgUv1GyaJKshIojZ3NZkNrayu2trawtLSEaDSKQCCAtrY29PX1kY9aFlPyQ9BfK4He3Nywkq6uLjidTuzv7/M4ip3Ka06wopKY2bfn5+dfaAcqWaZ/GlWY2iaZTHKuzWbzO7m2tvaryJH79PT0vVgOz5WsqRJr66d4BXwWK+/TLwEGANWKQFrivMnIAAAAAElFTkSuQmCC',
		 title:'Flashcard Editor',
		 wrapper:'frame'}
//Longman search does not lead directly to results	 
	];
//TUTORIAL ON FILTERING ELEMENTS (XPATH SYNTAX):
//.//div[@class="hat"]   finds all items of type 'div' with the class name "hat"
//.//*[@class="foo"]'    all items with the class name "foo"
//.//*[@accesskey]'      finds any item with the accesskey attribute, regardless of its value
//.//img[contains(@src,"MZZZZZZZ")]'    images whose URL contains the string MZZZZZZZ
//.//img[@width="36"][@height="14"]'    images with width of 36 and height of 14
//.//p[@class="g"]//a'                  finds links contained in a paragraph whose class is g
//.//p[@class="block"][last()-1]		selects the next-to-last 'p' with class = "block"
//.//div[@class="hat"][1]   			finds the first matched item of type 'div' with the class name "hat"
////a[@target="_blank" and contains(@href, "maps.google.")]		combination of two filters using 'and'

function lookup(evt){//callback when mouse passes over tooltip icon

	var divDic = getId('divDic');
	var divLookup = getId('divLookup');
	var top = divLookup.style.top;
	var left = divLookup.style.left;

	//no text selected
	if(!txtSel || txtSel=="")
	{
		if(divDic = getId('divDic'))
			divDic.parentNode.removeChild(divDic);
		if(divLookup = getId('divLookup'))
			divLookup.parentNode.removeChild(divLookup);
		return;
	}
	
	//cleanup divs
	if(divDic = getId('divDic'))
	{
		divDic.parentNode.removeChild(divDic);
	}	
	divLookup.parentNode.removeChild(divLookup);
	
	//div container
	divDic = createElement('div', {id:'divDic', class:'divDic', style:'top:'+top+'; left:'+left+';'});
	divDic.addEventListener('mousedown', dragHandler, false);
	document.body.appendChild(divDic);
	//store query as attribute
	divDic.setAttribute('query', txtSel);
	divDic.setAttribute('fronttemp', getId('divDic').getAttribute('query'));
	divDic.setAttribute('backtemp', '');
	divDic.setAttribute('frontsave', '');
	divDic.setAttribute('backsave', '');
	
	var ul, li, sp, ta
	ul = divDic.appendChild(createElement('ul',{id:'sitelist', style:'list-style:none outside none;  padding:0pt 0px 0pt 0px; margin:3px 0px;'}));
	li = ul.appendChild(createElement('li',{class:'tab_gen'}));
	back_forward(li);
	
	li = ul.appendChild(createElement('li',{style:'display:inline; padding:0px; float:left; width:40%', class:'tab_gen'}));
	ta = li.appendChild(createElement('textarea',{id:'research', style:'float:left; width:100%; min-height:15px; height:17px; line-height:inherit; min-width:inherit; vertical-align:middle; cursor:default; word-wrap:break-word; padding:0px; margin:4px 0px; border-width:0px;'},null,divDic.getAttribute('query').toLowerCase()));
	ta.addEventListener('focus',function () { //highlight text upon focus
            getId('research').select();
	},false)
	
	//re-search using google
	li = ul.appendChild(createElement('li',{class:'tab_gen'}));
	a = li.appendChild(createElement('a', {title:'Google Translate', href:HREF_NO, class:'tab_a', style:'padding-left:5px;'}, null, ''));
	a.addEventListener('click',function () {
			getId('divDic').setAttribute('query', getId('research').value.replace(/\n.+/,''));
			internetLookup(0);
		},false)
	a.appendChild(createElement('img',{src:websites[0].icon, class:'tab_p0'}));
	
	//plus icon
	li = ul.appendChild(createElement('li',{class:'tab_gen'}));
	sp = li.appendChild(createElement('a', {title:'More Search Options', href:HREF_NO, class:'tab_a'}, 'click showsearchoptions false', ""));
	sp.appendChild(createElement('img',{class:'tab_p0', src:'data:image/gif;base64,R0lGODlhFAAUAPcAAISEhM7Ozu/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAAFAAUAAAIWgADCBxIsKBBAQgTKlyYUCDDhwsdQpwoceLDigsBAICIUaFGjgEgfrwY8uFIhhg1qly5sWFJhCxZKuyY8GTElxlbosTpUedNkT5n8rTokihJozuR3jTI1GBAAAA7'}));
	
	
	//options link
	li = ul.appendChild(createElement('li',{class:'tab_gen', style:'float:right; text-align:right; margin-right:2px;'}));
	sp = li.appendChild(createElement('a', {id:'optionsLink', title:'Options (see popout below)', href:HREF_NO, class:'tab_a'}, 'click options false', ""));
	sp.appendChild(createElement('img',{class:'tab_p0', src:'data:image/gif;base64,R0lGODlhFAAUANUAAN3d3dzc3Nvb29ra2tnZ2dfX19bW1tTU1NPT09LS0tDQ0MzMzMvLy8rKysnJycjIyMXFxcTExMLCwsDAwL29vbu7u7q6urm5ube3t7a2trS0tLOzs7KysrCwsK+vr6ysrKurq6qqqqmpqaioqKampqWlpaGhoZ+fn56enpubm5qampiYmJaWlpOTk5KSko6Ojo2NjYuLi4WFhYGBgXx8fHp6enh4eGpqamdnZ2VlZf///wAAAAAAAAAAAAAAAAAAACH5BAEHADoALAAAAAAUABQAAAbPQJ1wSCwaj8jkkLFaMZTCRkfIAgBYwk7j6Gg5ShhHIODAlLoO4ycCKEQ2hcImUgBEPsfTgWAgjPkEBydIHxQIAyY5OSYDCBR4RRIyFyMGJS5CLiUGIxcyEkQzAAkQAzZENgMQCQAzRDQTsQMyRDIDsRM0RBU2ISoKGZAfGQoqITYVRiwkEwYWTRYGEyRYRzMcDxQLVgsUDxyuRi4oAB4oLx4eLygeACiYRRo3KTUxKSAgKTE1KTcaRxtgCMEhQgQOITA2QNHBQRGHhRAjJgkCADs='}));
	
	//flashcard link
	var fnum = websites.length-1;
	li = ul.appendChild(createElement('li',{class:'tab_gen', style:'float:right; text-align:right; margin-right:2px;'}));
	sp = li.appendChild(createElement('a',{class:'tab_a', id:'label_'+fnum.toString(),title:websites[fnum].title},'click toggleTab false',""));
		sp.appendChild(createElement('img',{src:websites[fnum].icon, id:'label_'+fnum.toString(), class:'tab_p0'}));
		sp.innerHTML += websites[fnum].name;
	
	
	//tab categories (initially hidden and height = 1px)
	for(var i=1; i<websites.length-1; i++){
	    if (i==1){
	       li = ul.appendChild(createElement('li',{id:'tab_cat_'+i.toString(), class:'tab_li', style:'clear:left; visibility:hidden; height:1px;'}));
	    } else {
	       li = ul.appendChild(createElement('li',{id:'tab_cat_'+i.toString(), class:'tab_li', style:'visibility:hidden; height:1px;'}));
	    }
		sp = li.appendChild(createElement('a',{class:'tab_a', id:'label_'+i.toString(),title:websites[i].title},'click toggleTab false',""));
		sp.appendChild(createElement('img',{src:websites[i].icon, id:'label_'+i.toString(), class:'tab_pr5'}));
		sp.innerHTML += websites[i].name;
	}
	
	//results div container
	divDic.appendChild(createElement('div',{id:'categoryresults', style:'position:relative; padding:1px; margin:0px; width:inherit; display:block; clear:both;'},null,"")); //initially "empty"
	
	//initialize
	internetLookup(0); //initial google result
}

function internetLookup(idx,jdx){//Sequence: internetLookup->extractResult->blackBoxResults

	if(jdx==null){
		var ws_url = parseHREF(websites[idx].ref.split('|#|'),idx);
	} else {
		var a = websites[idx].related.split(' ')[jdx];
		var ws_url = parseHREF(a.split('|#|'),idx);
	}
	
	GM_xmlhttpRequest({
		method: 'GET',
		url: ws_url,
		onload: function(resp) {
			try{
				extractResult(idx,resp,ws_url,jdx);
			}catch(e){
				if (getId('categoryresults') != null)
					getId('categoryresults').innerHTML = e;
				GM_log(e);
			}
		}
	});
}

function extractResult(idx,resp,ws_url,jdx){
//This is the main function which 
//--extracts the desired element(s) from the site
//--deletes undesired elements
//--custom filters for a few websites to modify display of results
//--flashcard shortcut "pencil" links

//from indices, create the required variables, i.e., website name, display wrapper, and filters
if(jdx==null) {
	//by default, all variables created from specification of "idx" only...
	var name = websites[idx].ref.split('|#|')[0];
	var wrppr = websites[idx].wrapper;
	var elefilter = websites[idx].elefilter;
	var elehidefilter = websites[idx]. elehidefilter;
	var noresult = websites[idx].no_result;
} else {
	//else create variables from jdx...
	var a = websites[idx].related.split(' ')[jdx];
	var b = a.split('|#|');
	var name = b[0];
	var wrppr = (b[5]).replace(/\#20/ig,' '); //replace pretend SPACE character "#20"
	var elefilter = b[6];
	if(b.length>7){
		var elehidefilter = (b[7]).replace(/\#20/ig,' ');
	} else {
		var elehidefilter = null;
	}
	if(b.length>8){
		var noresult = b[8];
	} else {
		var noresult = null;
	}
}

	//select body and remove some tags
	try {
		var html = resp.responseText.match(/\<body[^\>]*\>([\s\S]+)\<\/body\>/)[1];
	} catch(e) {
		var html = resp.responseText;
	}
	html = html.replace(/\<script[^\<]+\<\/script\>/ig,'').replace(/\<img[^\>]*\>/ig,'');
	
	//append requested page
	var divExtract = getId('divExtract');
	if(divExtract){
		divExtract.parentNode.removeChild(divExtract);
	}
	divExtract = document.body.appendChild(createElement('div', {id:'divExtract', style:'display:none; visibility:hidden;'}, null, html));
	
	//make all links of class gootranslink
	var arrs = getTag('a',divExtract);
	for(var i=0; i<arrs.length; i++){
		arrs[i].setAttribute('target','_blank');
		arrs[i].setAttribute('class','gootranslink');
		if(arrs[i].getAttribute('href') != null){
		//and, fix href's to point to the external sites
			arrs[i].setAttribute('href',arrs[i].getAttribute('href').replace(/^\#/,resp.finalUrl+'#'));
			arrs[i].setAttribute('href',arrs[i].getAttribute('href').replace(/^[%A20\s]+/,''));
			arrs[i].setAttribute('href',arrs[i].getAttribute('href').replace(/^\//,resp.finalUrl.replace(/(^http\:\/\/[^\/]+)\/.*/,'$1/')));
			if(arrs[i].getAttribute('href').replace(/^http.*/,'') != ""){
				arrs[i].setAttribute('href',resp.finalUrl.replace(/\w+\/$/,'')+'/'+arrs[i].getAttribute('href'));
			}
		}
	}
 
	//gather info
	if(idx != 0){//this is for anything other than google...
	
		//remove any background colors
		arrs = getTag('div',divExtract)
		for(var i=0; i<arrs.length; i++){
			arrs[i].setAttribute('style','background-color: none');
		}
		arrs = getTag('span',divExtract)
		for(i=0; i<arrs.length; i++){
			arrs[i].setAttribute('style','background-color: none');
		}
	
		//create "divFiltered" to store filtered results
		var divFiltered = getId('divFiltered');
		if(divFiltered){
			divFiltered.parentNode.removeChild(divFiltered);
		}

		try {
		divFiltered = divExtract.appendChild(createElement(wrppr, {id:'divFiltered'}, null, ""));
		
		//element (result) filter
		if(elehidefilter != null) {
			var c = document.evaluate(elefilter.replace(/\%20/ig,' '), divExtract, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			if (c.snapshotLength > 0){
				//if element to be filtered exists, then copy to divFiltered
				for (i=0; i<c.snapshotLength; i++) {
					divFiltered.appendChild(c.snapshotItem(i));
				}
			} else {
				//if there are no results, look for alternative text to display based on "no_results" filter
				if (noresult != null && noresult != ''){
					var c = document.evaluate(noresult.replace(/\%20/ig,' '), divExtract, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
					if (c.snapshotLength > 0){
						divFiltered.innerHTML = 'No results found.<br>';
						divFiltered.appendChild(c.snapshotItem(0));
					}
				}
			}
		}
		
		//hide elements filter
		if(elehidefilter != null && elehidefilter != ''){
			var r = elehidefilter.split(' ');
			for(var i=0; i<r.length; i++){
				ehr(r[i].replace(/\%20/ig,' '), divFiltered);
			}
		}
		
		//CUSTOM filtering for certain websites:
		//  Unfortunately, to give the human-translated sentences a simple right-left table format,
		//  it is necessary to modify the content of some of the websites
		if(name == 'Tatoeba'){
			//create table element
			var tb = divFiltered.appendChild(createElement('table',{id:'divFil_temp'}));//div[@class="result-block"]//div//div//div[1]
			//find column 1 and column 2
			var col1 = document.evaluate('.//div[@class="sentences_set"]//div[1]//div', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			var col2 = document.evaluate('.//div[@class="sentences_set"]//div[@class="translations"]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			if (col1){
				//fill table with column 1 & 2 results
				for (var i = 0; i < col2.snapshotLength; i++) {
					var tr = tb.appendChild(createElement('tr'));
					tr.appendChild(createElement('td',null,null,col1.snapshotItem(i).innerHTML));
					tr.appendChild(createElement('td',null,null,col2.snapshotItem(i).innerHTML));
				}
				//replace divFiltered with only the table content
				divFiltered.innerHTML = getId('divFil_temp').innerHTML;
			}
		} else if (name == 'bablaPhrases'){
			//create table element
			var tb = divFiltered.appendChild(createElement('table',{id:'divFil_temp'}));//div[@class="result-block"]//div//div//div[1]
			//find column 1 and column 2
			var col1 = document.evaluate('.//div[@class="result-wrapper"]//div//div[1]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			var col2 = document.evaluate('.//div[@class="result-wrapper"]//div//div[2]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			if (col1){
				//fill table with column 1 & 2 results
				for (var i = 0; i < col1.snapshotLength; i++) {
					var tr = tb.appendChild(createElement('tr'));
					tr.appendChild(createElement('td',null,null,col1.snapshotItem(i).innerHTML));
					tr.appendChild(createElement('td',null,null,col2.snapshotItem(i).innerHTML));
				}
				//replace divFiltered with only the table content
				divFiltered.innerHTML = getId('divFil_temp').innerHTML;
			}
		} else if (name == 'LingueePhrases'){
			//create table element
			var tb = divFiltered.appendChild(createElement('table',{id:'divFil_temp'}));
			//find column 1 and column 2
			var col1 = document.evaluate('.//div[@class="dictentry left"]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			var col2 = document.evaluate('.//div[@class="dictentry right"]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			if (col1){
				//fill table with column 1 & 2 results
				for (var i = 0; i < col1.snapshotLength; i++) {
					var tr = tb.appendChild(createElement('tr'));
					tr.appendChild(createElement('td',null,null,col1.snapshotItem(i).innerHTML));
					tr.appendChild(createElement('td',null,null,col2.snapshotItem(i).innerHTML));
				}
				//replace divFiltered with only the table content
				divFiltered.innerHTML = getId('divFil_temp').innerHTML;
			}
		} else if (name == 'babLa'){
			//must put collapsable content (hidden within a div) one level higher
			var collapse = document.evaluate('.//div[contains(@class,"collapse")]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			if (collapse){
				for (var i = 0; i < collapse.snapshotLength; i++) {
					for (var j = 0; j < collapse.snapshotItem(i).childNodes.length; j++) {
						collapse.snapshotItem(i).parentNode.appendChild(collapse.snapshotItem(i).childNodes[j]);
					}
					collapse.snapshotItem(i).parentNode.removeChild(collapse.snapshotItem(i));
				}
				//next, create a table and fill with content, similar to above example
				var tb = divFiltered.appendChild(createElement('table',{id:'divFil_temp'}));
				var col1 = document.evaluate('.//div[@class="result-block"]//div//div//div[1]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
				var col2 = document.evaluate('.//div[@class="result-block"]//div//div//div[2]', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
				for (var i = 0; i < col1.snapshotLength; i++) {
					var tr = tb.appendChild(createElement('tr'));
					tr.appendChild(createElement('td',null,null,col1.snapshotItem(i).innerHTML));
					tr.appendChild(createElement('td',null,null,col2.snapshotItem(i).innerHTML));
				}
				divFiltered.innerHTML = getId('divFil_temp').innerHTML;
			}
		} else if (name == 'Forvo_Pronunciation'){
			//create a "Play" link for audio
			var links = document.evaluate('.//a', divFiltered, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			for (var i = 0; i < links.snapshotLength; i++) {
				if (links.snapshotItem(i).textContent.length == 0){
					var play = links.snapshotItem(i).getAttribute('onclick');
					links.snapshotItem(i).innerHTML = 'Play';
					links.snapshotItem(i).removeAttribute('onclick');
					links.snapshotItem(i).removeAttribute('rel');
					links.snapshotItem(i).removeAttribute('target');
					links.snapshotItem(i).setAttribute('href',HREF_NO);
					links.snapshotItem(i).setAttribute('ogg',play.match(/\'[^\']+\'/ig)[1].replace(/\'/ig,''));
					//when addForvoAudioCallback() function is called, clicking on "Play" creates an audio element
					//which uses the "ogg" attribute to define the link to the audio
				}
			}
		}
		
		} catch(e) {
			if (getId('lookup_results') != null)
				getId('lookup_results').innerHTML = 'No results. (error!)';
			GM_log(e);
		}
		
		//return filtered HTML as the translation (divFiltered -> lookup_results)
		if(divFiltered == null || divFiltered.innerHTML == "" || divFiltered.textContent.length==0) {
			if(getId('lookup_results') != null)
				getId('lookup_results').innerHTML = ""; //remove "Loading ..."
				getId('lookup_results').appendChild(createElement('p',null,null,"No results. (empty)"));
		} else {
			if(getId('lookup_results') != null){
				getId('lookup_results').innerHTML = ""; //remove "Loading ..."
				blackBoxResults('lookup_results', ws_url, wrppr, document.getElementById('divDic').getAttribute('query',2), divFiltered.innerHTML, name,'Search Results','450px');
				if (idx == 1){
					addPencilIcon2Examples();
					addPencilIcon2DictExs();
				} else {
					addPencilIcon2DictExs();
					addForvoAudioCallback();
				}
				divExtract.removeChild(divFiltered); //delete divFiltered
				divExtract.parentNode.removeChild(divExtract); //delete divExtract
			}
		}
	} else {//Google Translate
		//returns text content only
		var c = document.evaluate('.//span[@id="result_box"]', divExtract, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		if (c.snapshotLength>0){
			var translation = c.snapshotItem(0).textContent;
			getId('divDic').setAttribute('backtemp',translation);
		} else {
			var translation = 'error filtering google translation';
		}
		
		//look for dictionary entries
		ehr('.//h3', divExtract); //remove h3
		var c = document.evaluate('.//div[@id="gt-res-dict"]', divExtract, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		if (c.snapshotLength>0){
			var dict='';
			dict = c.snapshotItem(0).innerHTML;//.replace(/<\/div><div>/ig,', ').replace(/<li>/ig,'<li style="color:#3399FF;">').replace(/<div>/ig,'<li style="color:#A6A6A6;">');
		}
		getId('categoryresults').innerHTML = ""; //Remove "Loading..." message
		blackBoxResults('categoryresults', ws_url, 'div', document.getElementById('divDic').getAttribute('query',2), translation+dict, 'Google Translate','google','450px');
		divExtract.parentNode.removeChild(divExtract);// delete divExtract
	}
}

function blackBoxResults(parentname,srch_url,wrap,qry,trans,srch_name,ttext,mw){
	//create black blox
	if (parentname != null && getId(parentname) != null) {
		var bb = getId(parentname).appendChild(createElement('div',{class:'blackbox', id:'dict', style:'max-width:'+mw+';'}));
		//add link
		bb.appendChild(createElement('a',{title:ttext, class:'gootranslink', target:'_blank', href:srch_url, style:'font-size: 10px;'},null,'Results of "<span class="greensearchterm" style="display:inline;">'+(qry.match(/^[\s\S]{15}/) ? qry.match(/^[\s\S]{15}/)[0]+'...' : qry.match(/^[\s\S]+/)[0])+'</span>" from '+srch_name+':'));
		//add results
		bb.appendChild(createElement('br'));
		bb.appendChild(createElement(wrap,null,null,trans));
		if (srch_url != 'empty'){//save to results history
			results_history.push(bb.innerHTML);
			results_history_idx=-1;
		}
	}
}

function back_forward(elem_){//results history controls
//< | >
		var dv = elem_.appendChild(createElement('div',{style:'word-spacing:5px; float:left; text-align:left; margin:4px 5px; display:inline; width:inherit;'},null,""));
		var a = dv.appendChild(createElement('a', {title:'Previous Result', href:HREF_NO, style:'color: #008087;'}, null, '<'));
		a.addEventListener('click',function () {//prev
			if (results_history.length > 0){
				if(getId('dict')==null){
					blackBoxResults('categoryresults', 'empty', 'div', 'empty', 'empty', 'empty','Empty Results','450px');
				}
				if (results_history_idx == -1){
					results_history_idx = results_history.length-2;
				} else {
					results_history_idx = results_history_idx-1;
				}
				if (results_history_idx < 0){
					results_history_idx = results_history.length-1;
				}
				getId('dict').innerHTML = results_history[results_history_idx];
				//addPencilIcon2Examples();
				addPencilIcon2DictExs();
				addForvoAudioCallback();
			}
			},false)

		dv.appendChild(createElement('span',{style:'display:inline;'},null,' | '));
		a = dv.appendChild(createElement('a', {title:'Next Result', href:HREF_NO, style:'color: #008087;'}, null, '>'));
		a.addEventListener('click',function () {//next
			if (results_history.length > 0){
				if(getId('dict')==null){
					blackBoxResults('categoryresults', 'empty', 'div', 'empty', 'empty', 'empty','Empty Results','450px');
				}
				if (results_history_idx == -1){
					results_history_idx = 0;
				} else {
					results_history_idx = results_history_idx+1;
				}
				if (results_history_idx >= results_history.length){
					results_history_idx = 0;
				}
				getId('dict').innerHTML = results_history[results_history_idx];
				//addPencilIcon2Examples();
				addPencilIcon2DictExs();
				addForvoAudioCallback();
			}
			},false)

}

function populateTabContent(idx){//when tab icon is picked, creates tab content (UL list)
								 //Sequence: toggleTab->populateTabContent->hereLinkClicked->internetLookup...

	var tbl, ul, li, a, b, query = getId('divDic').getAttribute('query').replace(/\s+$/,'').replace(/^\s+/,'');
	
	//add "related" links
	a = (websites[idx].ref+" "+websites[idx].related).split(' ');
    ul = getId('categoryresults').appendChild(createElement('ul',{id:'tabsubcontent', style:'list-style:none outside none; padding:1px; margin:2px; max-width:340px; display:block; clear:both;'}));
	for(var i=0; i<a.length; i++){
		b = a[i].split('|#|');
		if(b.length>5) {
		    li = ul.appendChild(createElement('li',{class:'tab_li_sm', id:'clicked_'+idx.toString()+'_'+i.toString(), title:b[0]}, 'click hereLinkClicked false',""));
			li.appendChild(createElement('a',{class:'tab_a_sm', target:'_blank', id:'clicked_'+idx.toString()+'_'+i.toString(), title:b[0]}, 'click hereLinkClicked false',b[0]));
		} else if(i==0) {
		    li = ul.appendChild(createElement('li',{class:'tab_li_sm', id:'label_'+idx.toString()+'_'+i.toString(), title:'Default Search'},'click toggleTab false',""));
			li.appendChild(createElement('a',{class:'tab_a_sm',target:'_blank', id:'label_'+idx.toString()+'_'+i.toString(), title:'Default Search'},'click toggleTab false',b[0]));
		} else {
			li = ul.appendChild(createElement('li',{class:'tab_li_sm', id:'label_'+idx.toString()+'_'+i.toString(), title:'Default Search'},null,""));
			li.appendChild(createElement('a',{class:'tab_a_sm',target:'_blank', href:parseHREF(b,idx)},null,b[0]));
		
		}
		
	}
	
	getId('categoryresults').appendChild(createElement('span',{id:'lookup_results', style:'display:block; clear:both;'},null,"")); //initially empty
	internetLookup(idx);
}

function flashcardEditor(){

	if (getId('divDic').getAttribute('frontsave') == "" && getId('divDic').getAttribute('backsave') == ""){
		var front = getId('divDic').getAttribute('fronttemp').replace(/\s+$/,'').replace(/^\s+/,'');
		var back = getId('divDic').getAttribute('backtemp').replace(/\s+$/,'').replace(/^\s+/,'');
	} else {
		var front = getId('divDic').getAttribute('frontsave');
		var back = getId('divDic').getAttribute('backsave');
	}
	
	getId('categoryresults').innerHTML = ""; //zero-out the html
	var bb = getId('categoryresults').appendChild(createElement('div',{id:'dict', class:'blackbox', style:'background: linear-gradient(to bottom, rgba(200,200,200,0), rgba(200,200,200,1)), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAC8CAIAAAAck6LaAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD2SURBVGhD7ZkxCsJQEET//W/kISzFxjJViGAhBERI9gCxGGYKwz7ZMgxx8mZcf8aW+IyEyIbKsY34gi9KwOAFXiRePpenP8OXKIWQyvf29occkSMpR8rFP6+FOqhTQIIXeIEXxYE2vNzn2Z9xnSZ/QiqPZfGHxmyTAL8WSgFe4EUBCV7gBV4UB9rw8lpXf0K7lL/UlULoXnxTSoHebZMjv1zY6ziBFCmiX+gXBRl4OQEvmc3jn3apzL1kfFHiwu+R6Bb9coJ+EZ8p30gxjATAC7woDrThxX9NWAqh063MRua/yi0FGrNNAvxa4IyM/yQiRfTLsWE70VzZrYAlkBUAAAAASUVORK5CYII=) repeat-x scroll center top #FFFFFF; max-width:450px;'},null,""));
	bb.appendChild(createElement('div',{style:'width:90%; float:center; text-align:center;'},null,'<b>Flashcard Editor</b>'));
	//bb.appendChild(createElement('br'));
	bb.appendChild(createElement('span',null,null,'Front:'));
	
	//prev | next
	var dv = bb.appendChild(createElement('div',{style:'word-spacing:5px; width:45%; float:right; text-align:right; margin-right:10px;'},null,""));
	var a = dv.appendChild(createElement('a', {title:'Previous Flashcard in Database', href:HREF_NO, class:"gootranslink"}, null, 'prev'));
	a.addEventListener('click',function () {//prev
			var flsh = GM_getValue('flashcards').split('\n');
			var idx = parseInt(getId('flashcardcount').innerHTML.replace(/\s\[/,"").replace(/\]\s/,""),10);
			if (isNaN(idx)) {
				idx = flsh.length-1;
			} else {
				idx = idx-1;
			}
			if (idx > 0) {
				getId('flashcardcount').innerHTML = ' ['+idx.toString()+'] ';
				getId('flashcardfront').value = flsh[idx].split('\t')[0].replace(/\<br\>/ig,'\n');
				getId('flashcardback').value = flsh[idx].split('\t')[1].replace(/\<br\>/ig,'\n');
			} else {
				getId('flashcardcount').innerHTML = ' [*] ';
				getId('flashcardfront').value = front;
				getId('flashcardback').value = back;
			}
		},false)
	dv.appendChild(createElement('span',{id:'flashcardcount'},null,' [*] '));
	a = dv.appendChild(createElement('a', {title:'Next Flashcard in Database', href:HREF_NO, class:"gootranslink"}, null, 'next'));
	a.addEventListener('click',function () {//next
			var flsh = GM_getValue('flashcards').split('\n');
			var idx = parseInt(getId('flashcardcount').innerHTML.replace(/\s\[/,"").replace(/\]\s/,""),10);
			if (isNaN(idx)) {
				idx = 1;
			} else {
				idx = idx+1;
			}
			if (idx > flsh.length-1){
				getId('flashcardcount').innerHTML = ' [*] ';
				getId('flashcardfront').value = front;
				getId('flashcardback').value = back;
			} else {
				getId('flashcardcount').innerHTML = ' ['+idx.toString()+'] ';
				getId('flashcardfront').value = flsh[idx].split('\t')[0].replace(/\<br\>/ig,'\n');
				getId('flashcardback').value = flsh[idx].split('\t')[1].replace(/\<br\>/ig,'\n');
			}
		},false)
	
	//frontside textarea
	bb.appendChild(createElement('textarea',{id:'flashcardfront', style:'width:90%; max-width:90%; min-height:72px; height:72px; background:none repeat scroll 0% 0% transparent; cursor:default; word-wrap:break-word; padding:5px; margin:5px;'},null,front));
		
	//re-search using google
	dv = bb.appendChild(createElement('div',{style:'width:90%; float:right; text-align:right; margin-right:10px;'}));
	a = dv.appendChild(createElement('a', {title:'Search using first line of "Front" text', href:HREF_NO, class:"gootranslink"}, null, 'Search'));
	a.addEventListener('click',function () {
			getId('divDic').setAttribute('query', getId('flashcardfront').value.replace(/\n.+/,''));
			internetLookup(0);
		},false)
	
	//backside textarea
	bb.appendChild(createElement('span',null,null,'<br>Back:'));
	bb.appendChild(createElement('textarea',{id:'flashcardback', style:'width:90%; max-width:90%; min-height:72px; height:72px; background:none repeat scroll 0% 0% transparent; cursor:default; word-wrap:break-word; padding:5px; margin:5px;'},null,back));

	//save changes
	dv = bb.appendChild(createElement('div',{style:'width:75%; float:left; text-align:left;'},null,""));
	a = dv.appendChild(createElement('a', {title:'Save Changes to Current Flashcard', href:HREF_NO, class:"gootranslink", style:'font-size:x-small;'}, null, 'save changes'));
	a.addEventListener('click',function () {//save changes
			var idx = parseInt(getId('flashcardcount').innerHTML.replace(/\s\[/,"").replace(/\]\s/,""),10);
			if (isNaN(idx)){
				//save current edits
				front = getId('flashcardfront').value;
				back = getId('flashcardback').value;
				getId('divDic').setAttribute('frontsave',getId('flashcardfront').value);
				getId('divDic').setAttribute('backsave',getId('flashcardback').value);
			} else {
				//save changes to saved flashcard
				var flsh = GM_getValue('flashcards').split('\n');
				GM_setValue('flashcards','');
				for (var i=1; i<flsh.length; i++) {
					if (i != idx) {
						GM_setValue('flashcards', GM_getValue('flashcards')+'\n'+flsh[i].replace(/\n/ig,'<br>'));
					} else {//save changes
						GM_setValue('flashcards', GM_getValue('flashcards')+'\n'+getId('flashcardfront').value.replace(/\n/ig,'<br>').replace(/\t/ig,' ')+'\t'+getId('flashcardback').value.replace(/\n/ig,'<br>').replace(/\t/ig,' '));
					}
				}
			}
		},false)
	
	//delete (saved cards only)
	dv.appendChild(createElement('span',null,null,' | '));
	a = dv.appendChild(createElement('a', {title:'Delete Saved Flashcard', href:HREF_NO, class:"gootranslink", style:'font-size:x-small;'}, null, 'remove'));
	a.addEventListener('click',function () {//save changes
			var idx = parseInt(getId('flashcardcount').innerHTML.replace(/\s\[/,"").replace(/\]\s/,""),10);
			if (!isNaN(idx)){
				var flsh = GM_getValue('flashcards').split('\n');
				GM_setValue('flashcards','');
				for (var i=1; i<flsh.length; i++) {
					if (i != idx) {
						GM_setValue('flashcards', GM_getValue('flashcards')+'\n'+flsh[i]);
					}
				}
				//Show previous card after deleting
				if (idx > 1){
					idx = idx-1;
					getId('flashcardcount').innerHTML = ' ['+idx.toString()+'] ';
				} else if(idx==1 && flsh.length>1) {
					idx = 2;
					getId('flashcardcount').innerHTML = ' [1] ';
				} else {
					getId('flashcardcount').innerHTML = ' [1] ';
					idx = 1;
				}
				if (flsh.length>0){
					getId('flashcardfront').value = flsh[idx].split('\t')[0];
					getId('flashcardback').value = flsh[idx].split('\t')[1];
				}
			}
		},false)
	
	//swap
	dv.appendChild(createElement('span',null,null,' | '));
	a = dv.appendChild(createElement('a', {title:'Swap Front/Back', href:HREF_NO, class:"gootranslink", style:'font-size:x-small;'}, null, 'swap'));
	a.addEventListener('click',function () {//swap
			var fs = getId('flashcardfront').value;
			getId('flashcardfront').value = getId('flashcardback').value;
			getId('flashcardback').value = fs;
		},false)
		
	//export
	dv.appendChild(createElement('span',null,null,' | '));
	dv.appendChild(createElement('span',{style:'font-size:x-small;'},null,'export: '));
	//view
	dv.appendChild(createElement('span',{style:'font-size:x-small;'},null,' | '));
	a = dv.appendChild(createElement('a', {title:'Copy & paste into text editor and save as UTF-8 for export to Anki)', href:HREF_NO, class:"gootranslink", style:'font-size:x-small;'}, null, 'view'));
	a.addEventListener('click',function () {
			var flsh = GM_getValue('flashcards').split('\n');
			var sp = getId('categoryresults').appendChild(createElement('span'));
			var tb = sp.appendChild(createElement('table'));
			for (var i=1; i<flsh.length; i++){
				tr = tb.appendChild(createElement('tr'));
				tr.appendChild(createElement('td',null,null,flsh[i].split('\t')[0].replace(/\<br\>/ig,'&lt;br&gt')));
				tr.appendChild(createElement('td',null,null,flsh[i].split('\t')[1].replace(/\<br\>/ig,'&lt;br&gt')));
			}
			document.body.innerHTML = sp.innerHTML;
			document.head.innerHTML = "";
		},false)
    //download
    if(GM_getValue('flashcards') == null){
        var cards = 'Nothing to export';
    } else {
        var cards = GM_getValue('flashcards');
    }
	dv.appendChild(createElement('span',{style:'font-size:x-small;'},null,' | '));
	a = dv.appendChild(createElement('a', {title:'Download Flashcards as Text File (exit and return to update recently added)', href:"data:application/octet-stream,"+encodeURIComponent(cards.replace(/^.+?\n/,'')), class:"gootranslink", style:'font-size:x-small;', download:'flashcards.csv'}, null, 'download'));
		
	//+Add
	dv = bb.appendChild(createElement('div',{style:'word-spacing:10px; width:15%; float:right; text-align:right; margin-right:10px;'}));
	a = dv.appendChild(createElement('a', {title:'Save Flashcard to Database', href:HREF_NO, class:"gootranslink"}, null, '+Add'));
	a.addEventListener('click',function () {
			GM_setValue('flashcards', GM_getValue('flashcards')+'\n'+getId('flashcardfront').value.replace(/\n/ig,'<br>').replace(/\t/ig,' ')+'\t'+getId('flashcardback').value.replace(/\n/ig,'<br>').replace(/\t/ig,' '));
		},false)
}

function toggleTab(evt){//Opens and Closes tab when tab label is clicked
	var idx = parseInt(evt.target.id.replace(/label_/,""),10);
	if (opentab == idx  && evt.target.getAttribute('title') != 'Default Search') {
		getId('categoryresults').innerHTML = ""; //zero-out the html
		//getId('label_'+idx.toString()).parentNode.setAttribute('style', 'display:inline;');
		opentab = 0;
	} else {
		opentab = idx;
		for (var i=1; i<websites.length-1; i++){
			     if (i==idx) {
				        getId('label_'+i.toString()).parentNode.setAttribute('class', 'tab_li_c');
			     } else {
				        getId('label_'+i.toString()).parentNode.setAttribute('class', 'tab_li');
			     }
		}
		
		if (idx == websites.length-1) {
			//flashcard editor
			flashcardEditor();
		} else {
			getId('categoryresults').innerHTML = ""; //zero-out the html
			populateTabContent(idx); //call function to populate data
		}
	}
}

function hereLinkClicked(evt){//When the "(here*)" for external sites is clicked, this function finds the indicies for calling "websites" array
	var idx = parseInt(evt.target.id.replace(/clicked_/,"").replace(/_.+/,""),10);
	var jdx = parseInt(evt.target.id.replace(/clicked_\d_/,""),10)-1;
	var rltd = websites[idx].related.split(' ');
	//cleanup
	getId('categoryresults').removeChild(getId('lookup_results')); //remove results span (containing previous blackbox results)
	getId('categoryresults').appendChild(createElement('span',{id:'lookup_results', style:'display:block; clear:both;'},null,'Loading... '+rltd[jdx].split('|#|')[0])); //create again, with msg
	internetLookup(idx,jdx);
}

function parseHREF(b,idx){//create url from query
	var q = trim(document.getElementById('divDic').getAttribute('query',2));
	if (idx != 0){
	   q = q.toLowerCase(); //if not Google Translate, change to lower case
	}
	var href_url = b[1].replace(/GDWORD/ig,encodeURIComponent(q)).replace(/\%20/ig, b[4]);
	href_url = href_url.replace(/GDISO1/ig,escape(q)).replace(/\%20/ig, b[4]);
	if(GM_getValue('from')=='enpt'){ //getId('optSelLangFrom').value
		href_url = href_url.replace('GDLNG1',b[3]).replace('GDLNG2',b[2]);
	} else {
		href_url = href_url.replace('GDLNG1',b[2]).replace('GDLNG2',b[3]);
	}
	return href_url;
}

function trim(str){
	return str.replace(/^\s+/,'').replace(/\s+$/,'');
}

function mousedownCleaning(evt){

	var divDic = getId('divDic');
	var divLookup = getId('divLookup');

	if(divDic)
	{
		if(!clickedInsideID(evt.target,'divDic')) {
			divDic.parentNode.removeChild(divDic);
			results_history = [];//remove results history
		}
	}	
	if(divLookup)
	{
		if(!clickedInsideID(evt.target,'divLookup'))
			divLookup.parentNode.removeChild(divLookup);			
			
	}
		
}

function showsearchoptions(evt){

    if (getId('tab_cat_1').style.visibility.toLowerCase() == 'hidden') {
        for(var i=1; i<websites.length-1; i++){
    	    getId('tab_cat_'+i.toString()).style.visibility = 'visible';
    	    getId('tab_cat_'+i.toString()).style.height = '18px';
    	 }
	 } else {
	     for(var i=1; i<websites.length-1; i++){
    	    getId('tab_cat_'+i.toString()).style.visibility = 'hidden';
    	    getId('tab_cat_'+i.toString()).style.height = '1px';
    	    getId('tab_cat_'+i.toString()).setAttribute('class','tab_li');
    	    if (getId('tabsubcontent')){
    	         getId('tabsubcontent').parentNode.removeChild(getId('tabsubcontent'));
    	    }
    	 }
    	 opentab = 0;
	 }
}

function showLookupIcon(evt){//google icon display

	if(!evt.ctrlKey && GM_getValue('ctrl'))//ctrl key
		return;
	
	if(evt.button == 2){
		mousedownCleaning(evt)
		return;
	}
	
	
	if(!initialized){
		images();
		css();	
		initialized = true;
	}
	
	var divDic = getId('divDic');
	var divLookup = getId('divLookup');
	var flashcardIcon = 0;
	
	//possible cleanup
	if(divDic) {
		//to prevent display of icon for text selected within divDic
		if(!clickedInsideID(evt.target,'divDic')){
			divDic.parentNode.removeChild(divDic);
		} else {
			if(clickedInsideID(evt.target,'dict') && !clickedInsideID(evt.target,'flashcardfront') && !clickedInsideID(evt.target,'flashcardback')){
				flashcardIcon = 1;
			} else {
				return;
			}
		}
	}

	//remove divLookup if exists
	if(divLookup)
	{
		if(!clickedInsideID(evt.target,'divLookup'))
			divLookup.parentNode.removeChild(divLookup);
		return
	}	
	txtSel = getSelection(evt);
	
	//exit if no text is selected
	if(!txtSel || txtSel=="")
	{
		if(divDic)
		{
			if(!clickedInsideID(evt.target,'divDic'))
				divDic.parentNode.removeChild(divDic);
		}
		if(divLookup)
		{	
			if(!clickedInsideID(evt.target,'divLookup'))
				divLookup.parentNode.removeChild(divLookup);
		}
		return;
	}
	
	if(!txtSel || txtSel=="")
	{
		if(divLookup)
		{	
			if(!clickedInsideID(evt.target,'divLookup'))
				divLookup.parentNode.removeChild(divLookup);
		}
		return;
	} else {
		
		var x = evt.clientX;
		var y = evt.clientY;
		divLookup = createElement('div', {id:'divLookup', style:'background: rgba(0, 0, 0, 0); color:#FFFFFF; position:absolute; top:'+(y+window.pageYOffset-25)+'px; left:'+(x+window.pageXOffset+10)+'px; padding:0px; width:30px; height:16px; z-index:999999999;'});
	
		if (flashcardIcon == 0) {
			divLookup.appendChild(imgLookup.cloneNode(false));
			divLookup.lastChild.addEventListener('mouseover', lookup, false);
		} else {
			//create text selection icon for flashcard
			if (txtSel != null && getId('divDic') != null) {
				if (getId('divDic').hasAttribute('query') && txtSel != getId('divDic').getAttribute('query')) {
					getId('divDic').setAttribute('currSel',txtSel);
					var fc = createElement('span',{style:'color:black;'},null,'<b>+</b>')
					fc.innerHTML += "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAASBJREFUGNNdjr9LAnEcht/PeT86OfqBGB6lLY4OUZAQQVAYJA1B/QeNtwfVZHNTm1v/QA2FmxIlNQTSVpQWElJZoGV6eV1+P013SM/88LwvMTOjD2YGEaF5f2K/lHJKz3Uwllx/pv8iALyXNliTl0gLxQEWuCtkHV/0Sp/lfWgjcbhv12g9OVD1MOxfyZW8ChGhfrkGfTQJ/j5DQC1BNRpoV694YtFSSAjBRITK6RZikwsQnQLAdXRqg/hpDsNMZ8DMkIiIi9kUolOr6LVyEM4Dvh4H0K52YaYz/lpgNlrbnFneUc4PLAyZOhrlABR9GuMru/5vAJBea5WguDlCwjBwsXeMj1YYkXnLL3nI+eIt5K5ALBKy57YPYSZSwf6Sxx/X9nxY3h9nJwAAAABJRU5ErkJggg==\" style=\" border:1px solid rgba(240,240,255,0.1); \" >";
					divLookup.appendChild(fc);
					divLookup.lastChild.addEventListener('mouseover', pencilIconTooltip, false);
				}
			}
		}
		document.body.appendChild(divLookup);
	}
}

function pencilIconTooltip(evt) {
	if (getId('divDic').hasAttribute('backtemp') && getId('divDic').hasAttribute('currSel')){
		if (getId('divDic').getAttribute('currSel').split('\t').length == 2){
			c = getId('divDic').getAttribute('currSel').split('\t');
			strg_to_flashcard(c[1],c[0]);
		} else {
			strg_to_flashcard(getId('divDic').getAttribute('currSel').replace(/\t/ig,'\n')," ");
		}
	}
	var divLookup = getId('divLookup');
	if (divLookup)
		divLookup.parentNode.removeChild(divLookup);
}

function addPencilIcon2Examples(){
	var trs = document.evaluate('.//tr', getId('dict'), null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for (var i=trs.snapshotLength-1; i>=0; i--) {
		if (trs.snapshotItem(i).hasChildNodes && trs.snapshotItem(i).nodeName.toUpperCase() == 'TR'){
			var tds = document.evaluate('.//td', trs.snapshotItem(i), null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
			if (tds){
				if (tds.snapshotLength == 2){//create 3rd column
					var tdn = trs.snapshotItem(i).appendChild(createElement('td',null,null,""));
					var sp = tdn.appendChild(createElement('span', {title:'Click to add Example to flashcard', href:HREF_NO, style:'position:relative; padding:5px; cursor:pointer;'}, 'click td2Flashcard false', ""));
					sp.appendChild(createElement('img',{style:'vertical-align:middle; padding:2px', src:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAASBJREFUGNNdjr9LAnEcht/PeT86OfqBGB6lLY4OUZAQQVAYJA1B/QeNtwfVZHNTm1v/QA2FmxIlNQTSVpQWElJZoGV6eV1+P013SM/88LwvMTOjD2YGEaF5f2K/lHJKz3Uwllx/pv8iALyXNliTl0gLxQEWuCtkHV/0Sp/lfWgjcbhv12g9OVD1MOxfyZW8ChGhfrkGfTQJ/j5DQC1BNRpoV694YtFSSAjBRITK6RZikwsQnQLAdXRqg/hpDsNMZ8DMkIiIi9kUolOr6LVyEM4Dvh4H0K52YaYz/lpgNlrbnFneUc4PLAyZOhrlABR9GuMru/5vAJBea5WguDlCwjBwsXeMj1YYkXnLL3nI+eIt5K5ALBKy57YPYSZSwf6Sxx/X9nxY3h9nJwAAAABJRU5ErkJggg=='}));
				} else if (tds.snapshotLength == 3){//replace 3rd column
					tds.snapshotItem(tds.snapshotLength-1).innerHTML = "";
					var sp = tds.snapshotItem(tds.snapshotLength-1).appendChild(createElement('span', {title:'Click to add Example to flashcard', href:HREF_NO, style:'position:relative; padding:5px; cursor:pointer;'}, 'click td2Flashcard false', ""));
					sp.appendChild(createElement('img',{style:'vertical-align:middle; padding:2px', src:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAASBJREFUGNNdjr9LAnEcht/PeT86OfqBGB6lLY4OUZAQQVAYJA1B/QeNtwfVZHNTm1v/QA2FmxIlNQTSVpQWElJZoGV6eV1+P013SM/88LwvMTOjD2YGEaF5f2K/lHJKz3Uwllx/pv8iALyXNliTl0gLxQEWuCtkHV/0Sp/lfWgjcbhv12g9OVD1MOxfyZW8ChGhfrkGfTQJ/j5DQC1BNRpoV694YtFSSAjBRITK6RZikwsQnQLAdXRqg/hpDsNMZ8DMkIiIi9kUolOr6LVyEM4Dvh4H0K52YaYz/lpgNlrbnFneUc4PLAyZOhrlABR9GuMru/5vAJBea5WguDlCwjBwsXeMj1YYkXnLL3nI+eIt5K5ALBKy57YPYSZSwf6Sxx/X9nxY3h9nJwAAAABJRU5ErkJggg=='}));
					
				}
			}
		}
	}
}

function addPencilIcon2DictExs(){//adds "pencil" shortcuts and remove foriegn classes and id's to avoid css confusion
	var ex = [
			{xpath:'.//span[@class="ex"]'},
			{xpath:'.//span[@class="eg"]'},
			{xpath:'.//em[@class="example"]'},
			{xpath:'.//span[@class="illustration"]'},
			{xpath:'.//span[@class="vi"]'},
			{xpath:'.//span[@class="ital-inline"]'},
			{xpath:'.//td[@class="ToEx"]'},
			{xpath:'.//p[@class="ExemploDefinicao"]'},
			{xpath:'.//div[@class="example"]'},
			{xpath:'.//td[@class="textoConcordanciador"]'},
			{xpath:'.//div[@class="qu_txt"]'},
			{xpath:'.//p[@class="EXAMPLE"]'}];
	for (var i=0; i<ex.length; i++){
		var exs = document.evaluate(ex[i].xpath, getId('dict'), null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		if (exs){
			for (var j=0; j<exs.snapshotLength; j++) {
				if (exs.snapshotItem(j).textContent.split(' ').length > 2){ //if more than 2 words, color in green
				    exs.snapshotItem(j).setAttribute('class','greensearchterm');
				    exs.snapshotItem(j).removeAttribute('id');
					var shortcut = exs.snapshotItem(j).appendChild(createElement('span', {title:'Click to add Example to flashcard', href:HREF_NO, style:'position:relative; padding:5px; cursor:pointer;'}, 'click ex2Flashcard false', ""));
					shortcut.appendChild(createElement('img',{style:'vertical-align:middle; padding:2px', src:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAASBJREFUGNNdjr9LAnEcht/PeT86OfqBGB6lLY4OUZAQQVAYJA1B/QeNtwfVZHNTm1v/QA2FmxIlNQTSVpQWElJZoGV6eV1+P013SM/88LwvMTOjD2YGEaF5f2K/lHJKz3Uwllx/pv8iALyXNliTl0gLxQEWuCtkHV/0Sp/lfWgjcbhv12g9OVD1MOxfyZW8ChGhfrkGfTQJ/j5DQC1BNRpoV694YtFSSAjBRITK6RZikwsQnQLAdXRqg/hpDsNMZ8DMkIiIi9kUolOr6LVyEM4Dvh4H0K52YaYz/lpgNlrbnFneUc4PLAyZOhrlABR9GuMru/5vAJBea5WguDlCwjBwsXeMj1YYkXnLL3nI+eIt5K5ALBKy57YPYSZSwf6Sxx/X9nxY3h9nJwAAAABJRU5ErkJggg=='}));
				}
			}
		}
	}
	
	//customization of certain tags for certain websites
	var ex = [
			{xpath:'.//span[@class="dnidex"]'},
			{xpath:'.//div[@class="SENSE-NUM"]'},
			{xpath:'.//span[@class="iteration"]'}];
	for (var i=0; i<ex.length; i++){
		var exs = document.evaluate(ex[i].xpath, getId('dict'), null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		if (exs){
			for (var j=0; j<exs.snapshotLength; j++) {
			    exs.snapshotItem(j).setAttribute('class','specialformatting_'+i.toString());
			    exs.snapshotItem(j).setAttribute('id','specialformatting');
			}
		}
	}
	
	//Remove "class" and "id" of non-green elements (experimental)
	var exs = document.evaluate('.//*', getId('dict'), null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	if (exs){
    	for (var j=0; j<exs.snapshotLength; j++) {
    		if (exs.snapshotItem(j).getAttribute('class') != 'greensearchterm' && exs.snapshotItem(j).getAttribute('class') != 'gootranslink' && exs.snapshotItem(j).getAttribute('id') != 'specialformatting') {
    		    exs.snapshotItem(j).removeAttribute('class');
    		    exs.snapshotItem(j).removeAttribute('id');
    		} else {
    		    exs.snapshotItem(j).removeAttribute('id');
    		}
    	}
    }
}

function addForvoAudioCallback(){//add audio callback (Forvo)
	var alink = document.evaluate('.//a[@ogg]', getId('dict'), null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for (var i = 0; i < alink.snapshotLength; i++) {
		alink.snapshotItem(i).addEventListener('click',function () {//audio
		//<audio autoplay="true"><source src="http://www.forvo.com/player-oggHandler.php?path=ODk3Mjg1Ni8zOS84OTcyODU2XzM5XzE0NzQ4XzEub2dn=="></audio>
		var audio = this.parentNode.appendChild(createElement('audio',{autoplay:'true'}));
		audio.appendChild(createElement('source',{src:'http://www.forvo.com/player-oggHandler.php?path='+this.getAttribute('ogg')}));
		},false);
	}
}

function ex2Flashcard(evt){//callback when pencil icon (in green-colored dictionary examples) is clicked
	var node = evt.target.parentNode.parentNode;

	//write to flashcard variables
	strg_to_flashcard(node.textContent,"");
	evt.target.parentNode.removeChild(evt.target);//erase pencil icon
}

function td2Flashcard(evt){//callback when pencil (in Examples) icon is clicked
	var node = evt.target.parentNode; //loop outward until find node with 'td' elements
	for (var i=0; i<5; i++){
		var tds = document.evaluate('.//td', node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		if (tds && tds.snapshotLength > 1){
			break;
		} else {
			node = node.parentNode;
		}
		if (i==4)
			return;
	}
	//write to flashcard variables
	strg_to_flashcard(tds.snapshotItem(1).textContent,tds.snapshotItem(0).textContent);
	evt.target.parentNode.removeChild(evt.target);//erase pencil icon
}

function strg_to_flashcard(bn,fn){//controls whether to write to "backsave" or "backtemp", etc.
	if (bn != "") {
		if (getId('divDic').getAttribute('backsave') == "" && getId('divDic').getAttribute('frontsave') == ""){
			getId('divDic').setAttribute('backtemp', getId('divDic').getAttribute('backtemp')+'\n\n'+bn.replace(/\t/ig,'').replace(/^\s+/,'').replace(/\n\s+\n/ig,'').replace(/\s+/ig,' '));
		} else {
			getId('divDic').setAttribute('backsave', getId('divDic').getAttribute('backsave')+'\n\n'+bn.replace(/\t/ig,'').replace(/^\s+/,'').replace(/\n\s+\n/ig,'').replace(/\s+/ig,' '));
		}
	}
	
	if (fn != "") {
		if (getId('divDic').getAttribute('backsave') == "" && getId('divDic').getAttribute('frontsave') == ""){
			getId('divDic').setAttribute('fronttemp', getId('divDic').getAttribute('fronttemp')+'\n\n'+fn.replace(/\t/ig,'').replace(/^\s+/,'').replace(/\n\s+\n/ig,'').replace(/\s+/ig,' '));
		} else {
			getId('divDic').setAttribute('frontsave', getId('divDic').getAttribute('frontsave')+'\n\n'+fn.replace(/\t/ig,'').replace(/^\s+/,'').replace(/\n\s+\n/ig,'').replace(/\s+/ig,' '));
		}
	}
}


function getSelection(evt){

	var txt = null;
	//get selected text
	if(evt && evt.target.nodeName=='TEXTAREA')
	{ 
		 txt = evt.target.value.substr(evt.target.selectionStart, evt.target.selectionEnd - evt.target.selectionStart);  		
	}
	else if (window.getSelection)
	{
		txt = window.getSelection();
	}
	else if (document.getSelection)
	{
		txt = document.getSelection();
	}
	else if (document.selection)
	{
		txt = document.selection.createRange().text;
	}
	//txt = encodeURIComponent(txt);//toString().replace(/\n/ig, '%0D%0A');
	return txt;
}

function options(evt){//fo

	if(!languagesGoogle){
		languagesGoogle = '<option selected value="pten">Portuguese->English</option><option value="enpt">English->Portuguese</option>';
	}
		
	var divOptions = getId('divOpt');
	
	if(!divOptions)//show options
	{
		try {
		divOptions = createElement('div', {id:'divOpt', style:'position:relative; padding:5px;'});
		getId('divDic').appendChild(divOptions);
		getId('optionsLink').style.visibility = 'hidden';

		
		//from->to
		divOptions.appendChild(createElement('span', null, null,'From->To:'));
		divOptions.appendChild(createElement('select', {id:'optSelLangFrom'}, null, languagesGoogle));
		getId('optSelLangFrom').value = GM_getValue('from') ? GM_getValue('from') : "pten";
		getId('optSelLangFrom').addEventListener('change', null, false);
		
		//use ctrl 
		divOptions.appendChild(createElement('br'));
		divOptions.appendChild(createElement('input', {id:'checkCtrl', type:'checkbox'}));
		divOptions.appendChild(createElement('span', null, null,'Use Ctrl key'));
		getId('checkCtrl').checked = GM_getValue('ctrl');
		
		//save
		//divOptions.appendChild(createElement('br'));
		divOptions.appendChild(createElement('a', {href:HREF_NO, style:'color: #008087;', class:"gootranslink"}, 'click saveOptions false', '<br>- SAVE -'));
		
		//cancel
		divOptions.appendChild(createElement('span', null, null,'&nbsp; &nbsp; &nbsp;'));
		divOptions.appendChild(createElement('a', {href:HREF_NO, style:'color: #008087;', class:"gootranslink"}, 'click options false', 'Cancel <br>'));
		}catch(e){
			if (getId('categoryresults') != null)
				getId('categoryresults').innerHTML = e;
		}

	}
	else//hide options
	{
		divOptions.parentNode.removeChild(divOptions);
		getId('optionsLink').style.visibility = 'visible';
	}
}

function saveOptions(evt){
	try {
	var from = getId('optSelLangFrom').value;
	var ctrl = getId('checkCtrl').checked;
	
	GM_setValue('from', from);
	GM_setValue('ctrl', ctrl);
	
	getId('divDic').removeChild(getId('divOpt'));
	getId('optionsLink').style.visibility = 'visible';
	
	internetLookup(0);
	}catch(e){
		if (getId('categoryresults') != null)
			getId('categoryresults').innerHTML = e;
	}
}

function css(){

	var style = createElement('style',{type:"text/css"},null,""+	
		
		//primary formatting for popup box and dictionary box
		'div.divDic {box-shadow: 0pt 0pt 12px 6px rgb(136, 136, 136); text-shadow:none; line-height:normal; background: black; color:#FFFFFF; position:absolute; min-width:250px; min-height:50px; max-width:450px; padding-left:5px;  padding-right:5px;  padding-bottom:0px;  padding-top:0px; font-size:small; text-align:left; z-index:999999999; border-width:2px; border-style:solid; border-radius:6px; width:auto;}'+
		'#divDic div.blackbox {background:white; padding:5px; border-width:2px; border-style:solid; border-radius:6px; margin:0px 0px 8px 0px; overflow-y:auto; overflow-x:hidden; font-size:small; overflow-y:auto; overflow-x:hidden; font-size:small; width:inherit; max-height:340px; border-color:#888888; color:#008087;}'+
		//tab image elements
		'#divDic img.tab_p0 {vertical-align:middle; padding:2px 3px 0px 3px; float:left; display:inline;}'+
		'#divDic img.tab_pr5 {vertical-align:middle; padding:3px 5px 0px 0px; float:left; display:inline;}'+
        //tab list-elements
		'#divDic li.tab_gen {line-height:100%; background:none; display:inline; margin:0px; padding:0px; float:left; vertical-align:middle;}'+
		'#divDic li.tab_li {border-top-right-radius:3px; border-top-left-radius:3px; line-height:100%; height:18px; float:left; display:inline; vertical-align:middle; padding:0px; margin:5px 0px 0px 0px; background-color:rgb(48,48,48); border-color:#888888 #888888 white #888888; border-style:solid; border-width:1px 1px 2px 1px;}'+
		'#divDic li.tab_li_c {border-top-right-radius:4px; border-top-left-radius:4px; line-height:100%; background:none; height:18px; float:left; display:inline; vertical-align:middle; padding:0px; margin:5px 0px 0px 0px; border-width:2px; border-style:solid solid none solid; border-color:white}'+
		'#divDic li.tab_li_sm {line-height:100%; background:none; float:left; display:inline; padding:0px; margin:0px;}'+
		//tab links
		'#divDic a.tab_a {border:none; padding-right:1px; padding-left:1px; display:block; vertical-align:middle; text-decoration:none; color:white;}'+
		'#divDic a.tab_a:hover {background-color:#101010;}'+
		'#divDic a.tab_a_sm {border:none; font-size:10px; padding-right:5px; padding-left:5px; display:block; text-decoration:none; color:white;}'+
		'#divDic a.tab_a_sm:hover {background-color:#707070;}'+
		//dictionary links
		'#dict a.gootranslink:link {color: #333366 !important; text-decoration: none;}'  +  
		'#dict a.gootranslink:visited {color: #333366 !important; text-decoration: none;}'+ 
		'#dict a.gootranslink:hover {color: #333366 !important; text-decoration: underline !important;}'  +
		'#dict a.gootranslink:active {color: #333366 !important; text-decoration: none;}' +
		//general formatting for dictionary elements
		'#dict div{ color: #27222b;}'+
		'#dict span { background: none; color: #27222b; display:inline;}'+
		'#dict table{  background: none; color: #27222b; font-size:13px; border: 1px solid none;}'+
		'#dict td{ background: none; border: 1px solid #ededed; cellpadding: 0; cellspacing: 0; color: #27222b;}'+
		'#dict tr{ background: none; border: 1px solid none; cellpadding: 0; cellspacing: 0;}'+
		//black text for certain dictionary elements
		'#dict p{background: none !important; color:#000000; font-size:12px;}'+
		'#dict h3{ background: none !important; color:#000000; font-size:13px; margin: 4px 4px 4px 4px;}'+
		'#dict h4{ background: none !important; color:#000000; font-size:13px; margin: 4px 4px 4px 4px;}'+
		'#dict h5{ background: none !important; color:#000000; font-size:13px; margin: 4px 4px 4px 4px;}'+
		'#dict ol{ background: none !important; color:#000000; font-size:11px;  margin-left: 3px; max-width:75%;}'+
		//grey2 text for certain dictionary elements
		'#dict h1{background: none !important; color: #7d7d7d; font-size:15px;}'+
		'#dict h2{background: none !important; color: #7d7d7d; font-size:14px;}'+
		'#dict i{color: #7d7d7d;}'+
		//blue-dark text for certain dictionary elements
		'#dict span:first-child {color: #003687;}'+
		'#dict em{color: #003687;}'+
		//blue-sky text for certain dictionary elements
		'#dict b{color: #008087;}'+
		'#dict abbr{color: #008087;}'+
		'#dict strong{color: #008087;}'+
		//Custom formatting for certain websites
		'#dict span.specialformatting_0{color: #008087;}'+ //dictionary.com
		'#dict  div.specialformatting_1{color: #008087;}'+ //MACM
		'#dict span.specialformatting_2{padding:5px;}'+ //oxford
		//green examples
		'#dict em.greensearchterm{color: #067000;}'+
		'#dict p.greensearchterm{color: #067000;}'+
		'#dict div.greensearchterm{color: #067000;}'+
		'#dict td.greensearchterm{color: #067000;}'+
		'#dict span.greensearchterm{color: #067000;}'

	);
	getTag('head')[0].appendChild(style);
}


function createElement(type, attrArray, evtListener, html)
{
	var node = document.createElement(type);

	for (var attr in attrArray) if (attrArray.hasOwnProperty(attr)){
		node.setAttribute(attr, attrArray[attr]);
	}

	if(evtListener){
		var a = evtListener.split(' ');
		node.addEventListener(a[0], eval(a[1]), eval(a[2]));
	} 
 
	if(html) 
		node.innerHTML = html;
	
	return node;
}

function getId(id, parent){
	if(!parent)
		return document.getElementById(id);
	return parent.getElementById(id);	
}

function getTag(name, parent){
	if(!parent)
		return document.getElementsByTagName(name);
	return parent.getElementsByTagName(name);
}

function ehr(p, context, doc) { //element hiding rule filter
	if (!context) 
		context = document;
	if (!doc) 
		doc = document;	
	elem = doc.evaluate(p, context, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for (var i = 0; i < elem.snapshotLength; i++) {
		elem.snapshotItem(i).parentNode.removeChild(elem.snapshotItem(i));
	}
}

/*
 * Drag and drop support adapted fom http://www.hunlock.com/blogs/Javascript_Drag_and_Drop
 */

var savedTarget=null;                           // The target layer (effectively vidPane)
var orgCursor=null;                             // The original mouse style so we can restore it
var dragOK=false;                               // True if we're allowed to move the element under mouse
var dragXoffset=0;                              // How much we've moved the element on the horozontal
var dragYoffset=0;                              // How much we've moved the element on the verticle

var didDrag=false;								//set to true when we do a drag
	
	
function moveHandler(e){
	if (e == null) return;// { e = window.event } 
	if ( e.button<=1 && dragOK ){
		savedTarget.style.left = e.clientX - dragXoffset + 'px';
		savedTarget.style.top = e.clientY - dragYoffset + 'px';
		return false;
	}
}

function dragCleanup(e) {
	document.removeEventListener('mousemove',moveHandler,false);
	document.removeEventListener('mouseup',dragCleanup,false);
	savedTarget.style.cursor=orgCursor;

	dragOK=false; //its been dragged now
	didDrag=true;
	
}

function dragHandler(e){

	var htype='-moz-grabbing';
	if (e == null) return;//{ e = window.event;}  // htype='move';} 
	var target = e.target;// != null ? e.target : e.srcElement;
	orgCursor=target.style.cursor;

	//if(target.nodeName!='DIV')
	//	return;
	if(clickedInsideID(target, 'dict')){
		return false;
	}
		//return;

	if (target = clickedInsideID(target, 'divDic')) {
		savedTarget=target;       
		target.style.cursor=htype;
		dragOK=true;
		dragXoffset = e.clientX-target.offsetLeft;
		dragYoffset = e.clientY-target.offsetTop;
		
		//set the left before removing the right
		target.style.left = e.clientX - dragXoffset + 'px';
		target.style.right = null;
		
		
		document.addEventListener('mousemove',moveHandler,false);
		document.addEventListener('mouseup',dragCleanup,false);
		return false;
	}
}

function clickedInsideID(target, id) {

	if (target != null && id != null) {
		if (target.getAttribute('id')==id)
			return getId(id);
	}
	
	if (target.parentNode) {
		while (target = target.parentNode) {
			try{
				if (target != null & id != null & target.getAttribute != null){
					if (target.getAttribute('id')==id)
						return getId(id);
				}
			}catch(e){
				if (getId('categoryresults') != null)
					getId('categoryresults').innerHTML = 'Error dragging object!<br>'+e;
			}
		}
	}
	
	return null;
}

//end drag code


/*
 * Images
 */
function images()
{
	imgLookup = createElement('img',{style:' border:1px solid rgba(50,50,255,0.3);'});
	imgLookup.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAIkSURBVHjafJPfS5NhFMc/m+9KF6lNZrhVuKRf6kUg3ghJt0IIQVZSN0Ip0U1G9B8IXtRFV9XVKIiaFwUD6SIqcGuji6C6GFQsWbh3YvrOV7e9bu+2p4unvdsbrnN1znnO+Z4f3/M4hBAY+XVBgxhGztLLZpHunhM0EYfz3+RoLMrL8KItalVNNAMQCsCzUIify8sApNUMgGUD3JyeagaA0mik1Qx+X48NqGY3naGQ+y0AviQSPHz0mNnbt/C2u5kLLrJ37K4VmNmBfLHAiunm17YJwMZFF0ptYccDRwBYeBHiaCBA4Nw11Mp/i9O1YOJsdFy9PEFazRD5EEOteGzVp31pZgNZDrkKu+9A38ryfilqS6rJ0D6NQXeOqqgw6mkjprkk3foaStksompbDAc9RC6Ns72p4fX5mdfkzABDPkPSmc1zoTPFPIMWuBNgOCjbPRPy03/yGN52N99ysGK6Aehv04muGLwp9gEw4jEx9DUJ4L9vY5LeB620tDgse9SzQ6Ui+KrBktYKwFTH9zqNQgjhupO0HOa9PpyTYQ6cHwPg7cBnvO1uSmbJitGNMlc+dZNc1+UIVV0eTVXP0HJdLjL76jUjHpOONoWPqyYzcYWZuMKTH7K7iYPZege1JACR02wjJecOMxNXiBbqtL47LTs+G+mUAAC7gewZ7pWL2t9lvVW3N+yn/Dff9iOdk2Gqz8cZeJoiXxL272calp66ccrxZwBv/uuqHYuQPQAAAABJRU5ErkJggg==';
}

// @copyright      2009, 2010 James Campos
// @license        cc-by-3.0; http://creativecommons.org/licenses/by/3.0/
if (typeof GM_deleteValue == 'undefined') {

    GM_addStyle = function(css) {
        var style = document.createElement('style');
        style.textContent = css;
        document.getElementsByTagName('head')[0].appendChild(style);
    }

    GM_deleteValue = function(name) {
        localStorage.removeItem(name);
    }

    GM_getValue = function(name, defaultValue) {
      var value = localStorage[name];
      return value == null ? defaultValue : JSON.parse(value);
    }

    GM_log = function(message) {
        console.log(message);
    }

     GM_registerMenuCommand = function(name, funk) {
    //todo
    }

    GM_setValue = function(name, value) {
      localStorage[name] = JSON.stringify(value);
    }
}