Drupal.behaviors.g3_taxonomy = function(context) {
	//"constants" as ie cant hande Node
	var TEXT_NODE = 3;
	var ELEMENT_NODE = 1;

	if(Drupal.settings.g3_taxonomy) {
		var terms_replace = [];
		var terms_keys = [];
		for(i in Drupal.settings.g3_taxonomy) {
			var term = Drupal.settings.g3_taxonomy[i];
			var term_pattern = new RegExp('%(' + term.key + ')%', 'gi');
			terms_replace[i] = {
				pattern : term_pattern,
				replacement : term.html
			}
			terms_keys.push(term.key);
		}
		var terms_prepare_pattern = new RegExp('(\\b' + terms_keys.join('\\b|\\b') + '\\b)', 'gi');

		function g3_recursive(dom) {
			if(!(dom.nodeType ==  ELEMENT_NODE && dom.tagName == "A")) {
				for(i in dom.childNodes) {
					if(dom.childNodes[i].nodeType == ELEMENT_NODE) {
						g3_recursive(dom.childNodes[i]);
					} else if(dom.childNodes[i].nodeType == TEXT_NODE) {
						//Har alla value?
						var new_content = dom.childNodes[i].nodeValue.replace(terms_prepare_pattern, '%$1%');
						if(dom.childNodes[i].nodeValue != new_content) {

							for(j in terms_replace) {
								new_content = new_content.replace(terms_replace[j].pattern, terms_replace[j].replacement);
							}
							var $new_content = $('<span>' + new_content + '</span>').find('div.teasers').hide().end();
							dom.replaceChild($new_content.get(0), dom.childNodes[i]);
							g3_tooltip(dom);
						}
					}
				}
			}
		}
		$('div.node', context).each(function() {
			g3_recursive(this);
		});
	}
}
