(function($)
{
	jQuery.expr[':'].icontains = function(a, i, m)
	{
	     return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
	};
	
	var elementsWithPossibleMatchesIn = ["a", "p", "li", "strong"];
	var css_class_for_matches = "search_string";

	var search_strings = [];

	function mark_search_results()
	{
		$.each(elementsWithPossibleMatchesIn, function(index, ewpmi)
		{
			$.each(search_strings, function(i, searchterm)
			{
				$(ewpmi + ":icontains('" + searchterm + "')").each(function()
				{
					var content = $(this).html();
				
					var regex = new RegExp("(" + searchterm + ")", "gi");
					content = content.replace(regex, "<span class = \"" + css_class_for_matches + "\">$1</span>");	
				
					$(this).html(content);
				});
			});
		});
	}

	function find_search_strings()
	{
		if (!$('#search_results')) { return; }

		var search_string = window.location.search.toLowerCase();
		search_string = search_string.match(/q=[\w+]*/);
		if (!search_string) { return; }
		search_string = search_string[0].substring(2);
		if (search_string.length < 2) { return; }
		search_strings = search_string.split('+');
	}

	$(document).ready(function()
	{
		find_search_strings();
		mark_search_results();
	});
})(jQuery);
