function initSearch() {



	var minSearchLength = 3;

	var searchDelay = 200;

	var loadingClass = "loading";

	var keyCodes = {

		BACKSPACE: 8,

		CAPS_LOCK: 20,

		COMMA: 188,

		CONTROL: 17,

		DELETE: 46,

		DOWN: 40,

		END: 35,

		ENTER: 13,

		ESCAPE: 27,

		HOME: 36,

		INSERT: 45,

		LEFT: 37,

		NUMPAD_ADD: 107,

		NUMPAD_DECIMAL: 110,

		NUMPAD_DIVIDE: 111,

		NUMPAD_ENTER: 108,

		NUMPAD_MULTIPLY: 106,

		NUMPAD_SUBTRACT: 109,

		PAGE_DOWN: 34,

		PAGE_UP: 33,

		PERIOD: 190,

		RIGHT: 39,

		SHIFT: 16,

		SPACE: 32,

		TAB: 9,

		UP: 38

	}

	var searchTimer = false;

	var closeTimer = false;

	var activeSearches = 0;

	var lastValue = '';

	var activeResult = false;

	var resultsOpen = false;

	

	var searchInput = $('#searchInput');

	searchInput.attr("autocomplete", "off");
	

	var searchUrl = searchInput.closest("form").attr("action");

	var searchResult = searchInput.siblings(".searchResults");



	var searchLabel = $('.searchpart label.over');	  


	if (searchInput.val() != '') {
		searchLabel.css({display: 'none'});				
	}
	


	searchInput.focus(function() {

		if (lastValue) showResults();

		searchLabel.css({display: 'none'});						   

	});

	

	searchInput.blur(function() {

        closeResults();



		

	});	

	

	searchInput.bind("keypress",function(event) {

		switch(event.keyCode) {

			case keyCodes.UP:

				focusUp();

				break;

			case keyCodes.DOWN:

				focusDown();

				break;

			case keyCodes.ENTER:

				if (resultsOpen) event.preventDefault();

				if (activeResult) {

					document.location.href = activeResult.find('a').eq(0).attr("href");

				} else {

					searchInput.closest("form").submit();

				}

				break;

			case keyCodes.TAB:

				if (resultsOpen) event.preventDefault();

				focusDown();

				break;

			case keyCodes.ESCAPE:

				closeResults();

				break;

			default:

				setTimeout(executeSearch,10);

				break;

			}											  

	});

	

	$(".search .searchResults .resultsList li").live("mouseover",function(){activateResult(this);});

	$(".search .searchResults a[rel=ajaxify]").live("click",function(e) {

		if (closeTimer) clearTimeout(closeTimer);

		e.preventDefault();

		searchResult.load($(this).attr("href"));

		showResults();

		searchInput.focus();

	});

	

	$(".search .searchResults a[rel=didyoumean]").live("click",function(e) {

		if (closeTimer) clearTimeout(closeTimer);

		e.preventDefault();

		searchInput.val(searchResult.find("span.didyoumean_query").html());

		executeSearch();

		searchInput.focus();

	});

	

	searchResult.click(function(){

		if (closeTimer) clearTimeout(closeTimer);

		searchInput.focus();

	});

	function executeSearch() {

		var val = jQuery.trim(searchInput.val());			

		if (val.length < minSearchLength)	{



			return false;					

		}	

		

		if (lastValue == val) {

			return false;					

		}					



		if (!activeSearches && !searchTimer) startSearch(val);

			else setSearchTimeout(val);

					

	}

	

	function setSearchTimeout(val) {

		if (searchTimer) 

			clearTimeout(searchTimer);	

			

		searchTimer = setTimeout(function(){

			searchTimer = false;

			startSearch(val);									   

		}, searchDelay);	

		

	}





	var rn = 0;
	var ln = 0;
	function startSearch(val) {

		var cn = rn++;

		searchInput.closest('div').addClass(loadingClass);

		

		lastValue = val;

		activeSearches++;

		$.get(searchUrl,{searchQuery: val},function(data,textStatus){
			if (cn<ln) return;										
			ln=cn;
			
			displayResults(data,textStatus);

		},'html');

		

	}



	function displayResults(data,textStatus) {

		activeSearches--;

		activeResult = false;

		if (!activeSearches && !searchTimer) searchInput.closest('div').removeClass(loadingClass);

		searchResult.html(data);

		showResults();

	}

	

	function showResults() {

		resultsOpen = true;

		searchResult.show();

		

	}

	

	function closeResults() {

		resultsOpen = false;

		closeTimer = setTimeout(function() {

			searchResult.hide();

			if (searchInput.val() != '') return;

			searchLabel.css({display: ''});			

		},500);

	}	

	

	function activateResult(resultItem) {

		

		if (activeResult) deactivateResult();

		activeResult = $(resultItem).addClass("selected");	

	}

	

	function deactivateResult() {	



		activeResult.removeClass("selected");

	}

	

	function focusUp() {

		if (!resultsOpen) return false;

		if (!activeResult) {

			activateResult(searchResult.find(".resultsList li:last"));

			return;

		}	

	

		var prev = activeResult.prev()[0];

		if (!prev) {

			prev = searchResult.find(".resultsList li:last");

		}

		activateResult(prev);

	}

	

	function focusDown() {

		if (!resultsOpen) return false;

		if (!activeResult) {

			activateResult(searchResult.find(".resultsList li:first"));

			return;

		}	

	

		var next = activeResult.next()[0];

		if (!next) {

			next = searchResult.find(".resultsList li:first");

		}

		activateResult(next);

	}	



	



	

}
