﻿(function($){
	$.fn.uSearcher = function(setting){
		$.fn.uSearcher.option = $.extend($.fn.uSearcher.option, setting);
		
		var top = this.offset().top;
		var left = this.offset().left;
		var size = getSize(this[0]);
		
		var $result = $("<div></div>").attr("id", "searchResult")
			.addClass("searchResult")
			.css("position", "absolute")
			.css("top", top+size.height)
			.css("left", left)
			.css("width", size.width-2)
			.css("z-index", 999)
			.appendTo($("body")).hide();
		
	
		//按方向键定位时的当前位置
		$.fn.uSearcher.curIndex = -1;
		//最大个数
		$.fn.uSearcher.maxItemNum = 10;		
		//当前实际个数
		$.fn.uSearcher.curItemNum = 0;		
		//按键上次输入框的值。如果值相同，则不触发Ajax后台请求。
		$.fn.uSearcher.lastKeyWord = "";
		
		//输入框失去焦点时
		$(document).click(function(e){
			$result.slideUp(100);
		});
		
		//按键查询
		this.keyup(function(e){
			
			//当前输入框对象
			var $input = $(this);
			
			//没有关键字。
			if($input.val() == ""){
				return;
			}
			
			if ((e.keyCode == '40' || e.keyCode == '38' || e.keyCode == '13')){
				//方向键导航
				navigate(e.keyCode, $input, $result);
				return;
			}
			
			//本次的关键字和上次的一样，则不请求后台查询
			if($.fn.uSearcher.lastKeyWord == $input.val()){
				$result.slideDown(100);
				return;
			}
			
			//更新关键字
			$.fn.uSearcher.lastKeyWord = $input.val();
			
			$.ajax({
			    type: "GET",
			    url: $.fn.uSearcher.option.dataURL,
				data: {"keyword": $input.val()},
			    dataType: "xml",
				success: function(xmlData){
					 //alert( $(xmlData).find("title").text() );
					 //显示结果提示
					 displayResult(xmlData, $input, $result);
				}

			});
			
			//记录日志（暂时收集。以后关闭）
			/**
			$.ajax({
			    type: "POST",
			    url: "/cms/search/recordAutoSuggestLog.php",
				data: {"keyword": $input.val()},
			    dataType: "html",
				success: function(resp){
					 //alert(resp);
				}

			});
			*/
			
		});//end keyup
	};
	
	//默认参数
	$.fn.uSearcher.option = {
		"dataURL": "search/getKeyWords.php",
		"onItemSelected": function(value, $input, $result){//元素选中后的处理
			$input.val(value);
			$result.slideUp(100);
		}
	};
	
	//取对象的大小
	function getSize(obj){
		var width = obj.offsetWidth;
		var height = obj.offsetHeight;
		return {"width":width, "height":height};
	};
	
	//按键导航
	function navigate(keyCode, $input, $result){
		//alert($.fn.uSearcher.curIndex);
		if(keyCode == '40'){// DOWN
			if(($.fn.uSearcher.curIndex+1) >= ($.fn.uSearcher.curItemNum)){
				$.fn.uSearcher.curIndex = -1;//到了底部又从头来
				$result.find("a:eq("+($.fn.uSearcher.curItemNum-1)+")").removeClass("hover");
			}
			$input.val($result.find("a:eq("+($.fn.uSearcher.curIndex+1)+")").find("span:eq(0)").text());
			//上一行选中的样式清除
			$result.find("a:eq("+($.fn.uSearcher.curIndex)+")").removeClass("hover");
			$result.find("a:eq("+(++$.fn.uSearcher.curIndex)+")").addClass("hover");
		} else if (keyCode == '38'){//UP
			if($.fn.uSearcher.curIndex <= 0){
				$.fn.uSearcher.curIndex = $.fn.uSearcher.curItemNum;//到了头部又从底来
				$result.find("a:eq(0)").removeClass("hover");
			}
			$input.val($result.find("a:eq("+($.fn.uSearcher.curIndex-1)+")").find("span:eq(0)").text());
			$result.find("a:eq("+($.fn.uSearcher.curIndex)+")").removeClass("hover");
			$result.find("a:eq("+(--$.fn.uSearcher.curIndex)+")").addClass("hover");
		}else if(keyCode == "13"){//ENTER
			var value = $result.find("a:eq("+($.fn.uSearcher.curIndex)+")").find("span:eq(0)").text();
			//alert(value);
			$.fn.uSearcher.option.onItemSelected(value, $input, $result);
		}
		
	};
	
	//显示结果层
	function displayResult(xmlData, $input, $result){
		//位置归0
		$.fn.uSearcher.curIndex = -1;
		var val = $input.val();
		
		var $items = $(xmlData).find("item");
		var itemLen = $(xmlData).find("item").length;
		
		//alert(itemLen);
		
		//更新当前个数
		$.fn.uSearcher.curItemNum = itemLen;
		
		$result.html("");
		
		var ul = $("<ul></ul>").appendTo($result);
		for(var i=0; i<itemLen; i++){
			var $item = $($items.get(i));
			var li = $("<li></li>").appendTo(ul);
			var a = $("<a></a>").html("<span class='left'>" + $item.find("title").text() + "</span><span class='right'>" + $item.find("hits").text() + "次下载</span>").attr("href", "javascript://").attr("title", $item.find("title").text()).appendTo(li);
			a.click(function(){
				//第一个span为关键字。
				//alert($(this).find("span:eq(0)").text());
				$.fn.uSearcher.option.onItemSelected($(this).find("span:eq(0)").text(), $input, $result);
			});
		}
		var infoLi = $("<li>维软酷站 书籍搜索 by yiditushe.</li>").css({"text-align": "right", "color":"#ff0000", "background-color": "#FFFFB0", "line-height": "20px"}).appendTo(ul);
		
		$("<span title='关闭'>[关闭]</span>").css({"cursor": "pointer", "color":"black"}).appendTo(infoLi);
		
		$result.slideDown(100);
	};
	
})(jQuery);