document.write("<link href='http://www.51766.com/www2009/ajaxSearchInfo/css/searchInfo.css' rel='stylesheet' type='text/css' />");
var searchInfoObj=null;
var selectedIndex=-1;
 // 获取元素的纵坐标
function getTop(e)
{
    var offset = e.offsetTop;
    if (e.offsetParent != null)
        offset += getTop(e.offsetParent);
    return offset;
}

// 获取元素的横坐标
function getLeft(e)
{
    var offset = e.offsetLeft;
    if (e.offsetParent != null)
        offset += getLeft(e.offsetParent);
    return offset;
}
//创建遮盖物
function createMark(obj)
{
	if(!document.all)return;
	var suggestMark=document.getElementById("suggestMarkForSearchInfo");
	if(!suggestMark)
	{
		var suggestMark=document.createElement("DIV"); 
		suggestMark.id="suggestMarkForSearchInfo";
		suggestMark.style.visibility="";
		suggestMark.style.position="absolute";
		suggestMark.style.left=getLeft(obj)+"px";
		suggestMark.style.top=getTop(obj)+"px";
		suggestMark.style.width=obj.offsetWidth+"px";
		suggestMark.style.height=obj.offsetHeight+"px";
		suggestMark.style.border="black 0px solid";
		var iframeMark=document.createElement("IFRAME");
		iframeMark.style.width=obj.offsetWidth+"px";
		iframeMark.style.height=obj.offsetHeight+"px";
		suggestMark.appendChild(iframeMark);
		document.body.appendChild(suggestMark);
	}
	else
	{
		suggestMark.style.height=obj.offsetHeight+"px";
		$(suggestMark).find("IFRAME")[0].style.height=obj.offsetHeight+"px";
	}
}
//删除遮盖物
function deleteMark()
{
	if(!document.all)return;
	var suggestMark=document.getElementById("suggestMarkForSearchInfo");
	if(suggestMark)
		$(suggestMark).remove();
}
$(function(){
	searchInfoObj=document.createElement("div");			
	searchInfoObj.id="search_info";
	document.body.appendChild(searchInfoObj);
});
(function($){
	$.fn.searchInfo=function(options){
		options=$.extend({
			type:'', //请求数据类型，如机票写'jp'，数据类型可自行在ajax/searchInfo.jsp中编辑，此为必填项
			ajax_url:'http://www.51766.com/www2009/ajaxSearchInfo/ajax/searchInfo.jsp', //请求地址，有默认值，此为可选项
			width:180,  //显示宽度，此为可选项
			auto:false, //是否自动选择第一个值，不适用于初始值，此为可选项
			initData:null, //初始值，此为可选项
			callback:null //需要执行的回调函数，此为可选项
		},options);
		var timer=null;
		var input=null;
		var lastValue='';
		var result=[];
		var isInit=false;
		//开始监听用户输入
		var start=function(e){
			input=e.target;
			searchInfoObj.style.top=getTop(input) +input.offsetHeight+"px";
			searchInfoObj.style.left=getLeft(input)+"px";
			/*
			if(searchInfoObj)
			{
				$(searchInfoObj).mousedown(function(e){
					input.blur();
					e.stopPropagation();
				});
			}
			*/
			if(options.width)
				searchInfoObj.style.width=options.width+"px";
			if(input.tagName.toLowerCase()=="input")
			{
				if(options.initData)
					isInit=true;
				timer=setInterval(function(){
					if(isInit || (input && $.trim(input.value)!=$.trim(lastValue)))
						changeValue();
				},100);
			}
		};
		//停止监听用户输入
		var stop=function(e){
			input=e.target;
			if(input.tagName.toLowerCase()=="input")
			{
				if(selectedIndex>-1)
				{
					input.value=result[selectedIndex][0];
					if(input.callback && input.value!=""){
						input.callback.call(window,result[selectedIndex]);
					}
				}
				lastValue='';
				clearInterval(timer);
				$(searchInfoObj).hide(deleteMark());
				input=null;
			}
		};
		//通过ajax调用，显示符合条件的结果
		var changeValue=function(){
			if(input && options.type!='')
			{
				isInit=false;
				var value=lastValue=input.value;
				var array=new Array();
				var count=0;
				selectedIndex=-1;
				if($.trim(value)=='' || value.indexOf("请输入")!=-1)
				{
					if(options.initData)
					{
						result=options.initData;
						array.push('	<ul>');
						array.push('		<div> 请按↑↓或者鼠标点击选择</div>');
						for(var i=0;i<result.length;i++)
						{
							if(count>=10)
								break;
							if(result[i])
							{
								array.push('		<li onmouseover="selectedIndex='+i+';$(this).addClass(\'over_css\')" onmouseout="selectedIndex=-1;$(this).removeClass(\'over_css\')">'+result[i][1]+'</li>');
								count++;
							}
						}
						array.push('	</ul>');
						searchInfoObj.innerHTML=array.join('');
						$(searchInfoObj).show();
						createMark(searchInfoObj);
					}
					else
					{
						$(searchInfoObj).hide(deleteMark());
					}
				}
				else
				{
					var currentInput=input;
					$.ajax({
						type:'post',
						url:options.ajax_url,
						data:'type='+options.type+'&value='+value,
						timeout:60000,
						success:function(msg){
							result=eval(msg);
							if(result && result.length>0)
							{
								if(options.auto && options.auto==true)
									selectedIndex=0;
								array.push('	<ul>');
								array.push('		<div> 请按↑↓或者鼠标点击选择</div>');
								for(var i=0;i<result.length;i++)
								{
									if(count>=10)
										break;
									if(result[i])
									{
										array.push('		<li class="'+(options.auto==true && selectedIndex==i?"over_css":"")+'" onmouseover="selectedIndex='+i+';$(this).addClass(\'over_css\')" onmouseout="selectedIndex=-1;$(this).removeClass(\'over_css\')">'+result[i][1]+'</li>');
										count++;
									}
								}
								array.push('	</ul>');
								searchInfoObj.innerHTML=array.join('');
								if(document.activeElement==currentInput)//判断当前具有焦点的对象是否为原文本框对象
								{
									$(searchInfoObj).show();
									createMark(searchInfoObj);
								}
							}
							else
							{
								$(searchInfoObj).hide(deleteMark());
							}
						},
						error:function()
						{
							lastValue='';
							clearInterval(timer);
							$(searchInfoObj).hide(deleteMark());
							input=null;
						}
					});
				}
			}
		};
		//用户按键事件 如：按回车，按↑  按↓
		var keyEvent=function(e){
			var liList=searchInfoObj.getElementsByTagName("li");
			if(e.keyCode==40)
			{
				
				if(selectedIndex+1>=liList.length)
				{
					selectedIndex=-1;
				}
				selectedIndex=selectedIndex+1;
				$(liList[selectedIndex]).addClass('over_css');
				for(var i=0;i<liList.length;i++)
				{
					if(i!=selectedIndex)
					$(liList[i]).removeClass('over_css');
				}
			}
			else if(e.keyCode==38)
			{
				if(selectedIndex<=0)
				{
					selectedIndex=liList.length;
				}
				selectedIndex=selectedIndex-1;
				$(liList[selectedIndex]).addClass('over_css');
				for(var i=0;i<liList.length;i++)
				{
					if(i!=selectedIndex)
					$(liList[i]).removeClass('over_css');
				}
			}
			else if(e.keyCode==13)
			{
				if(selectedIndex>-1 && selectedIndex<liList.length)
				{
					input.blur();
					e.stopPropagation();
				}
			}
		};
		return this.each(function(){
			this.callback=options.callback;
			$(this).focus(start).blur(stop).keydown(keyEvent);
		});
	};
})(jQuery)