//阿q创建于2010-1-27  QQ9567262	
/**
* 开始搜索
* @param obj	文本框对象
* @param e		event事件 
*/
function search_start(obj,e)
{
	var keycode;
	if ("\v"=="v"){//ie
		keycode=e.keyCode;
	}else{//ff
		keycode=e.which;
	}
	if(keycode==13 || keycode==27)
	{
		return false;
	}
	if(keycode==38 || keycode==40)
	{
		search_choseBykey(keycode);
		return false;
	}

	var value=obj.value;
	var datasource=obj.getAttribute("datasource");
	
	if(obj.id.length<=0)			//创建搜索框id
	{
		obj.id="search_"+datasource;
	}
	var objid=obj.id;
	if(value.length<=0 || datasource.length<=0)
	{
		search_default(objid);
	}
	else
	{
		search_searching(objid);	//开始搜索
	}
}

/**
* 显示选择列表
* @param objid 选择列表id
* @return Void
*/
function search_default(objid)
{
	var obj=document.getElementById(objid);	
	var value=obj.value.toLowerCase();
	var defaultData=obj.getAttribute("defaultData");	//默认选项
	var strdata=defaultData;
	
	if(strdata=="")
	{
		return false;
	}
	else
	{
		var arySearchData=strdata.split("@");
		var arySearchData_len=arySearchData.length;
		var Rs_num=0; //检索信息数量
		var str_len=value.length;
		var arytemp;
		var arydata=new Array();	//用于存储数据
		for(var i=0;i<arySearchData_len;i++)
		{
			arytemp=arySearchData[i].split("|");
			if(value.substr(0,str_len)==arytemp[0].substr(0,str_len) || value.substr(0,str_len)==arytemp[1].substr(0,str_len) || value.substr(0,str_len)==arytemp[2].substr(0,str_len))
			{
				arydata[Rs_num]=arytemp;
				Rs_num++;
				if(Rs_num>=10)		//列表显示数量
				{
					break;
				}
			}
		}
		search_showList(arydata,obj);		//显示列表
	}
}

/**
* 显示选择列表
* @param objid 选择列表id
* @return Void
*/
function search_searching(objid)
{
	var obj=document.getElementById(objid);	
	var value=obj.value.toLowerCase();
	var datasource=obj.getAttribute("datasource");
	var strdata;
	eval("strdata=search_"+datasource+"();");
	strdata=strdata.toLowerCase();
	if(strdata=="")
	{
		defaultData(objid);
		return false;
	}
	else
	{
		var arySearchData=strdata.split("@");
		var arySearchData_len=arySearchData.length;
		var Rs_num=0; //检索信息数量
		var str_len=value.length;
		var arytemp;
		var arydata=new Array();	//用于存储数据
		for(var i=0;i<arySearchData_len;i++)
		{
			arytemp=arySearchData[i].split("|");
			if(value.substr(0,str_len)==arytemp[0].substr(0,str_len) || value.substr(0,str_len)==arytemp[1].substr(0,str_len) || value.substr(0,str_len)==arytemp[2].substr(0,str_len))
			{
				arydata[Rs_num]=arytemp;
				Rs_num++;
				if(Rs_num>=10)		//列表显示数量
				{
					break;
				}
			}
		}
		search_showList(arydata,obj);		//显示列表
	}
}

/**
* 显示列表
*/
function search_showList(arydata,obj)
{
	search_close();
		//search_deleteAllChild(search_outside);

	search_outside=document.createElement("div");
	search_outside.id="search_outside";
	search_outside.targetObj=obj.id
	search_outside.objForSaveId=obj.getAttribute("objForSaveId");
	var e=obj;
	
	var t=e.offsetTop;
	var l=e.offsetLeft;
	while(e=e.offsetParent) 
	{  
		t+=e.offsetTop;  
		l+=e.offsetLeft;  
	} 
	var h=obj.offsetHeight;
	var w=obj.offsetWidth;
	t=t+h;
	search_outside.style.left=l+"px";
	search_outside.style.top=t+"px";
	
	var search_html="";
	var data_len=arydata.length;
	if(data_len>0)
	{
		var objul;
		for(var i=0;i<data_len;i++)
		{
			if(i==0)
			{
				objul=search_createline(arydata[i],obj.value,"search_ul_checked");	//默认选中第一项
			}
			else
			{
				objul=search_createline(arydata[i],obj.value,"search_ul_unhover");
			}
			search_outside.appendChild(objul);
		}
	}
	else
	{
		var objul=search_noresult();
		search_outside.appendChild(objul);
	}
	document.getElementsByTagName('body')[0].appendChild(search_outside);
	//创建iframe作为底板
	search_background=document.createElement("iframe");
	search_background.id='search_background';
	search_background.className="search_background";
	search_background.style.left=l+"px";
	search_background.style.top=t+"px";
	document.getElementsByTagName('body')[0].appendChild(search_background);
	document.onclick=search_mousedown;
}

/**
* 创建一行的对象
* @param arydata	对象1
* @param kwd		关键词
* @param ulclass	类样式
* @return object
*/
function search_createline(arydata,kwd,ulclass)
{
	var data1=arydata[0];
	var data2=arydata[1];
	var data3=arydata[2];
	var obj=document.createElement("ul");
	obj.className=ulclass;
	obj.className1=ulclass;
	obj.className2="search_ul_hover";
	obj.onmouseover=function anonymous() { search_styleSwitch(this,"className2"); };
	obj.onmouseout=function anonymous() { search_styleSwitch(this,"className1"); };
	obj.title=data1+"|"+data2+"|"+data3;
	obj.onclick=function (){search_chose(this)}
	var kwd=kwd.toLowerCase();
	if(kwd.length>0)
	{
		data1=data1.replace(kwd,'<span class="search_keyword">'+kwd+'</span>');
		data2=data2.replace(kwd,'<span class="search_keyword">'+kwd+'</span>');
	}
	var obj1=document.createElement("li");
	obj1.className="search_li_left";
	obj1.innerHTML="&nbsp;"+data1;
	var obj2=document.createElement("li");
	obj2.className="search_li_right";
	obj2.innerHTML=data2;
	obj.appendChild(obj1);
	obj.appendChild(obj2);
	return obj;
}

/**
* 没有结果的显示方式
* @return Object
*/
function search_noresult()
{
	var obj=document.createElement("ul");
	obj.className="search_ul_disable";
	var obj1=document.createElement("li");
	obj1.className="search_ul_disable";
	obj1.innerHTML="没有符合条件的选项";
	obj.appendChild(obj1);
	return obj;
}

/**
* 选中结果
* @param obj ul对象
* return Void
*/
function search_chose(obj)
{
	var arydata=obj.title.split("|");
	var targetObj=obj.parentNode.targetObj;
	var objForSaveId=obj.parentNode.objForSaveId;	//取得存储id号的对象id
	if(targetObj!=null && targetObj.length>0)
	{
		document.getElementById(targetObj).value=arydata[0];
	}
	if(objForSaveId!=null && objForSaveId.length>0)
	{
		document.getElementById(objForSaveId).value=arydata[2];
	}
	search_close();
	
}

//删除所有子对象
function search_deleteAllChild(o)
{
	while(o.hasChildNodes())
	{
		o.removeChild(o.lastChild);
	}
}
 

/* 键盘按键部分 start */
function search_choseBykey(keycode)
{
	var obj=document.getElementById("search_outside");
	if(obj==null)	//判断对象是否存在，存在继续，不存在终止脚本
	{
		return false;
	}
	else
	{
		switch(keycode)
		{
			case 38:	//up键
				var aryChild_len=obj.childNodes.length;
				var now_i=0;	//用于存储当前选中的对象自然序号	
				for(var i=0;i<aryChild_len;i++)
				{
					if(obj.childNodes[i].className=='search_ul_disable')
					{
						return false;
						break;
					}
					if(obj.childNodes[i].className=='search_ul_checked')
					{
						now_i=i;
						break;
					}
				}
				obj.childNodes[now_i].className="search_ul_unhover";
				obj.childNodes[now_i].className1="search_ul_unhover";
				if(now_i==0)		//当前选中的是第一个
				{
					obj.childNodes[aryChild_len-1].className="search_ul_checked";
					obj.childNodes[aryChild_len-1].className1="search_ul_checked";
				}
				else			//其他情况
				{
					obj.childNodes[now_i-1].className="search_ul_checked";
					obj.childNodes[now_i-1].className1="search_ul_checked";
				}
				break;
			case 40:	//down键
				var aryChild_len=obj.childNodes.length;
				var now_i=aryChild_len-1;	//用于存储当前选中的对象自然序号	
				for(var i=0;i<aryChild_len;i++)
				{
					if(obj.childNodes[i].className=='search_ul_disable')
					{
						return false;
						break;
					}
					if(obj.childNodes[i].className=='search_ul_checked')
					{
						now_i=i;
						break;
					}
				}
				
				obj.childNodes[now_i].className="search_ul_unhover";
				obj.childNodes[now_i].className1="search_ul_unhover";
				if(now_i==(aryChild_len-1))	//当前选中的是最后一个
				{
					obj.childNodes[0].className="search_ul_checked";
					obj.childNodes[0].className1="search_ul_checked";
				}
				else			//其他情况
				{
					obj.childNodes[now_i+1].className="search_ul_checked";
					obj.childNodes[now_i+1].className1="search_ul_checked";
				}
				break;
			case 13:	//回车键
				var aryChild_len=obj.childNodes.length;
				if(aryChild_len<=0)
				{
					return false;
				}
				else
				{	
					for(var i=0;i<aryChild_len;i++)
					{
						if(obj.childNodes[i].className=='search_ul_disable')
						{
							return false;
							break;
						}
						if(obj.childNodes[i].className=='search_ul_checked')
						{
							search_chose(obj.childNodes[i]);
							break;
						}
					}
				}
			case 32:	//空格键
				var aryChild_len=obj.childNodes.length;
				if(aryChild_len<=0)
				{
					return false;
				}
				else
				{	
					for(var i=0;i<aryChild_len;i++)
					{
						if(obj.childNodes[i].className=='search_ul_disable')
						{
							return false;
							break;
						}
						if(obj.childNodes[i].className=='search_ul_checked')
						{
							search_chose(obj.childNodes[i]);
							break;
						}
					}
				}	
				break;
			default:
				return false;
				break;
		}
	} 
}

window.document.onkeydown=function(event){
	var keycode;
	if ("\v"=="v"){//ie
		keycode=window.event.keyCode;
	}else{//ff
		keycode=event.which;
	}
	if(keycode==13)
	{
		search_choseBykey(keycode)
	}
	else if(keycode==27)
	{
		search_close();
	}
	else
	{
		return true;	
	}
}

/** 关闭outsize
* @return Void  
*/
function search_close()
{
	obj=document.getElementById("search_outside");
	obj1=document.getElementById("search_background");
	if(obj1!=null)
	{
		obj1.parentNode.removeChild(obj1);
	}
	if(obj!=null)
	{
		obj.parentNode.removeChild(obj);
	}
}

/* 键盘按键部分 end */

/* 检测部分 start */
/**
* 根据id检测对象内容是否有对应的数据存在
* @param objid	文本框的id
* @return boolean
*/
function search_checkById(objid)
{
	var obj=document.getElementById(objid);
	if(obj==null)
	{
		alert(objid+"对象加载异常！");
		return false;
	}
	else
	{
		var value=obj.value.toLowerCase();
		if(value<=0)
		{
			return false;
		}
		var datasource=obj.getAttribute("datasource");
		var strdata;
		eval("strdata=search_"+datasource+"();");
		strdata=strdata.toLowerCase();
		var arySearchData=strdata.split("@");
		var arySearchData_len=arySearchData.length;
		var Rs_num=0; //检索信息数量
		var str_len=value.length;
		var arytemp;
		var arydata=new Array();	//用于存储数据
		for(var i=0;i<arySearchData_len;i++)
		{
			arytemp=arySearchData[i].split("|");
			if(arytemp[0]==value)
			{
				return true;
			}
		}
		return false;
	}
}
/* 检测部分 end */

/**
* 鼠标滑过的样式
* @param cn		样式名
* @param obj	对象名称
* return Void
*/
function search_styleSwitch(obj,name)
{
	eval("obj.className=obj."+name+";");
}

/** 鼠标点在空白处的处理
* @return Void
*/
function search_mousedown(e)
{
	if(!e)
	{
		e=window.event;
	}
	obj=document.getElementById("search_outside");
	if(e.srcElement)
	{
		var eid=e.srcElement.id;
	}
	else
	{
		var eid=e.target.id;
	}

	if(obj!=null)
	{
		n=obj.targetObj;
		if(eid!=n && eid!="search_outside")
		{
			search_close();
		}
	}
	else
	{
		return true;
	}
}
