new function()
{
	var DEFAULT_SEARCH_VALUE = "Search This Site";
	
	var attachEvent = function()
	{
		if (window.attachEvent)
		{
			return function(element, name, handler)
			{
				element.attachEvent("on" + name, function()
				{
					if (!handler(element))
					{
						event.returnValue = false;
						event.cancelBubble = true;
					}
				});
			}
		}
		if (window.addEventListener)
		{
			return function(element, name, handler)
			{
				element.addEventListener(name, function(e) {
					if (!handler(element))
					{
						e.stopPropagation();
						e.preventDefault();
					}
				}, false);
			}
		}
		return function(){};
	}();
	
	var detachEvent = function()
	{
		if (window.detachEvent)
		{
			return function(element, name, handler)
			{
				element.detachEvent("on" + name, handler);
			}
		}
		return function(){};
	}();
	
	var retrieveText = function(node)
	{
		var text = node.innerText;
		if (!text)
		{
			var textNode = node.firstChild;
			if (textNode && textNode.nodeType == 3)
			{
				text = textNode.nodeValue;
			}
		}
		return text;
	}
	
	attachEvent(window, "load", adjustSearchBoxes);
	
	function adjustSearchBoxes()
	{
		var siteSearch = document.getElementById("siteSearch");
		if (siteSearch)
		{
			// remove Search if other inputs are found
			var inputs = document.getElementsByTagName("input");
			if (inputs.length > 0)
			{
				var counter = 0;
				for(var i = 0; i < inputs.length; i++)
				{
					var input = inputs[i];
					if (input.type == "submit")
					{
						counter++;
					}
					if (counter > 1)
					{
						siteSearch.parentNode.removeChild(siteSearch);
						return;
					}
				}
			}
		}
		
		var searchLabel = document.getElementById("searchLabel");
		var idleSearchValue = searchLabel ? retrieveText(searchLabel) : DEFAULT_SEARCH_VALUE;
		
		var searchQuery = document.getElementById("searchQuery");
		if (searchQuery)
		{
			searchQuery.value = idleSearchValue;
			attachEvent(searchQuery, "focus", Query_OnFocus);
			attachEvent(searchQuery, "blur", Query_OnBlur);
			attachEvent(siteSearch, "submit", Form_OnSubmit);
			attachEvent(window, "unload", Query_OnUnload);
		}
		
		function Form_OnSubmit()
		{
			return searchQuery.value != idleSearchValue;
		}

		function Query_OnFocus()
		{
			if (searchQuery.value == idleSearchValue)
			{
				searchQuery.value = "";
			}
			return true;
		}
		
		function Query_OnBlur()
		{
			if (searchQuery.value.length == 0)
			{
				searchQuery.value = idleSearchValue;
			}
			return true;
		}
		
		function Query_OnUnload()
		{
			detachEvent(searchQuery, "focus", Query_OnFocus);
			detachEvent(searchQuery, "blur", Query_OnBlur);
			detachEvent(window, "unload", Query_OnUnload);	
			detachEvent(siteSearch, "submit", Form_OnSubmit);
		}
	}
		
}