function Suggest() {
	this.suggestIdx = 0;
	this.totalSuggestNum = null;
	this.suggestData = null;
	this.isSuggestLayer = false;
	
	this.getSuggest = function(ev){
		var self = this;
		if(ev.which == 38 || ev.which == 40) {
			this.cursorMove(ev.which);
			return false;
		} else if(ev.which == 37 || ev.which == 39) {
			return false;
		}
		
		this.createSuggestLayer();		
		var q = $("#form_main_search input[name='q']").val();
		if(!q) {
			$("#suggestLayer").hide();
			return false;
		} else {
			$.getJSON("/search/suggest.ajax.php?q="+encodeURI(q) ,
				function(data) {
					self.suggestData = data.data;
					self.totalSuggestNum = data.data.length;
					self.suggestIdx = 0;
					self.drawSuggest();
				});
		}
	}

	this.createSuggestLayer = function(){
		if(this.isSuggestLayer) {
			return false;
		}
		else {
			$.create('div',{'id' : 'suggestLayer'},'').appendTo($('#form_main_search'));
			var p = $("#form_main_search input[name='q']").position();
			$("#suggestLayer").css({ 'left' : p.left - 5 , 'top' : p.top + 22 });
			this.isSuggestLayer = true;
		}
		
		$("#form_main_search input[name='q']").bind("blur", function(){
			window.setTimeout("$('#suggestLayer').hide();",500);
		});
	}
	
	this.drawSuggest = function(idx){
		var str = '';
		if(this.totalSuggestNum) {
			str += "<ul class='ul_suggests'>";
			for(var i=0; i < this.totalSuggestNum ; i++){
				str += "<li class='clear_both'>";
				str += "<div class='keywd' onclick=\"suggest.goSearch("+i+");\">"+this.suggestData[i].html_str+"</div>";
				if(this.suggestData[i].opt_str) {
					str += "<div class='opt clear_both'>"+this.suggestData[i].opt_str+"</div>";
				}
				str +="</li>";
			}
			str += "</ul>";
			$("#suggestLayer").html(str);
			$("#suggestLayer").show();
		} else {
			$("#suggestLayer").html(str);
			$("#suggestLayer").hide();
		}
	}
	
	this.cursorMove = function(key) {
		if(this.totalSuggestNum < 1) return false;
		switch(key) {
			case 38 :
				if(this.suggestIdx - 1 < 1) return false;
				this.suggestIdx--;
				break;
			case 40 :
				if(this.suggestIdx + 1 > this.totalSuggestNum) return false;
				this.suggestIdx++;
				break;
		}
		$("#suggestLayer").show();		
		this.hightlightSuggest(this.suggestIdx);
	}
	
	this.hightlightSuggest = function(idx) {
		if(!this.suggestData) return false;
		$(".ul_suggests li.highlight").removeClass('highlight');
		$(".ul_suggests li:eq("+(idx-1)+")").addClass('highlight');
		$("#form_main_search input[name='q']").val(this.suggestData[idx-1].org_str);
	}
	
	this.goSearch = function(idx) {
		$("#form_main_search input[name='q']").val(this.suggestData[idx].org_str);
		$("#form_main_search").submit();
	}
}

