	var currentSuggestBox;
	var lastKeyword = "";
	var categoryMain;
	var searchKeyword;
	var suggestPath = './suggest.do';
	var ajaxFlag = true;
	var suggestLock = false;
	var keyMoveLock = true;
	document.onkeydown = function(event){
		var evt = event || window.event || null;
		if(evt == null){
			return true;
		}

		var obj = Event.element(evt);
		if(obj == null){
			return true;
		}

		if(obj.id.startsWith("suggestbox") && evt.keyCode == 13){
			return false;
		}

		return true;
	}
	function showSuggest(element,transport){
		if(transport.responseText.replace(/(^\s*)|(\s*$)/g, "") == "empty"){
			clearSuggest();
			return
		}
		var pos = $(element).cumulativeOffset();
		var list = $("suggestlist");
		if(list != null){
			list.innerHTML = transport.responseText;
			list.setStyle({
				left:pos.left + "px",
				top:pos.top + $(element).getHeight() + "px",
				width:($(element).getWidth() - 2 + "px"),
				display:"block",
				position:"absolute"
			});
		}
		keyMoveLock = false;
	}

	function clearSuggest(){
		keyMoveLock = true;
		setTimeout(function(){
			var list = document.getElementById("suggestlist");
			if(list != null){
				list.style.display = "none";
			lastKeyword = "";
			}
		},200);
	}
	function  ajaxKeyDown(element,event, paramPage){

		currentSuggestBox = element;
		if(event.keyCode =='13'){
			var txt = document.getElementById(currentSuggestBox.id);
			var categoryId = ($('preCategory') == null || $('preCategory').value == "" ) ? 1 : $('preCategory').value;
			var info = {keyword:txt.value,category:categoryId};
			var searchBoxId = element.id.substr(10);
			doSearch(info, paramPage);
			return;
		}else if(event.keyCode =='38'){
			if(keyMoveLock){
				return;
			}
			suggestLock == true;
			getCurrentTdUp();
		}else if(event.keyCode =='40'){
			if(keyMoveLock){
				return;
			}
			suggestLock == true;
			getCurrentTdDown();
		}
	}

	/**
	 * 渡されたキーコードによってサジェストを表示させるか判断し、実行する
	 */
	function ajaxKeyUp(element,event){
		currentSuggestBox = element;
		if(element.value.replace(/(^\s*)|(\s*$)/g, "") == "" || event.keyCode =='27'){
			clearSuggest();
			return;
		}
		if(event.keyCode =='38'){

		}else if(event.keyCode =='40'){

		}else if(event.keyCode =='13'){
			//FF Browser
			if(!window.event){
				if(element.value != lastKeyword){
					doSuggest(element);
					lastKeyword = element.value;
				}
			}
			return;
		}
		else{
			if(element.value == lastKeyword){
				lastKeyword = element.value;
				return;
			}else{
				doSuggest(element);
				return;
			}
		}

	}

	/**
	 * FIXME 200できっちゃっていいのか。。。
	 */
	function doSuggest(element){
		//ブラウザが、IEとGecko（Geckoエンジンブラウザ）以外はRequestの送信を行わない
		if((Prototype.Browser.IE && !isIE5) || Prototype.Browser.Gecko){
			currentSuggestBox = element;
			var keyword = element.value;
			if(keyword.length > 200){
				keyword = keyword.substr(0,200);
			}
			var parms = "?keyword=" + encodeURIComponent(keyword);
			new Ajax.Request(suggestPath,{
				 method:'get',
				 parameters:parms,
				 onSuccess:function(transport){
				 	showSuggest(element,transport);
				 }
	    	})
		}
	}

	function mover(liItem)
	{
		var list = document.getElementById("suggestlist");
		if(list != null){
			var li = list.getElementsByTagName("li");
			for(var i = 0;i < li.length;i++){
				if(li[i].style.color == "white")
				{
					li[i].style.color = "black";
					li[i].style.backgroundColor = "white";
				}
			}
			liItem.style.cursor="default";
			liItem.style.backgroundColor="blue";
			liItem.style.color="white";
		}
	}

	function mout(li)
	{
		li.style.backgroundColor="white";
		li.style.color="black"
	}

	function choose(li,idx)
	{
		var txt = document.getElementById(currentSuggestBox.id);
		var keyword = document.getElementsByClassName('suggestKeyword',$(li));
		var orgCharset=document.charset;
		document.charset='UTF-8';
		txt.value = keyword[0].innerHTML;
		document.charset=orgCharset;

		var categoryId = ($('preCategory') == null || $('preCategory').value == "" ) ? 1 : $('preCategory').value;
		var info = {keyword:txt.value,category:categoryId};
		var paramPage = $("paramPage").value;
		doSearch(info, paramPage);
	}
	function setCursorPosition(oInput,oStart,oEnd)
	{
	    if(oInput.setSelectionRange) {
	        oInput.setSelectionRange(3,3);
	        oInput.focus();
	    }
	}
	function getCurrentTdDown()
	{

		var list = document.getElementById("suggestlist");
		if(list != null){
			var li = list.getElementsByTagName("li");
			var txt = document.getElementById(currentSuggestBox.id);
			var flag = 0;
			for(var i = 0;i < li.length;i++)
			{
				var keyword = document.getElementsByClassName('suggestKeyword',$(li[i]));
				if(li[i].style.color == "white")
				{
					//li[i].setAttribute("onmouseover","");
					if(i == li.length - 1)
					{
						mover(li[i]);
						var keyword = document.getElementsByClassName('suggestKeyword',$(li[i]));
						txt.value = keyword[0].textContent || keyword[0].innerText;
						lastKeyword = txt.value;
					}
					else
					{
						mover(li[i+1]);
						var keyword = document.getElementsByClassName('suggestKeyword',$(li[i+1]));
						txt.value = keyword[0].textContent || keyword[0].innerText;
						lastKeyword = txt.value;
					}

					flag = 1;
					break;
				}
			}
			if(flag == 0)
			{
				mover(li[0]);
				var keyword = document.getElementsByClassName('suggestKeyword',$(li[0]));
				txt.value = keyword[0].textContent || keyword[0].innerText;
				lastKeyword = txt.value;
			}
		}

	}

	function getCurrentTdUp()
	{
		var list = document.getElementById("suggestlist");
		if(list != null){
			var li = list.getElementsByTagName("li");
			var txt = document.getElementById(currentSuggestBox.id);

			for(var i = 0;i < li.length;i++)
			{

				if(li[i].style.color == "white")
				{
					//li[i].setAttribute("onmouseover","");
					if(i != 0)
					{
						mover(li[i-1]);
						var keyword = document.getElementsByClassName('suggestKeyword',$(li[i-1]));
						txt.value = keyword[0].textContent || keyword[0].innerText;
						var leng = txt.value.length;
						setTimeout(function(){setCursorPosition(txt,leng,leng);},0.5);
						lastKeyword = txt.value;

					}
					else
					{
						mout(li[0]);
						txt.focus();
					}
					break;
				}
			}
		}
	}


