//shortcut method
var $ = function(s)
{
	return (typeof s == "object") ? s: document.getElementById(s);
};

function InitTableDisplayChange()
{
    var obj = new Object();
    //内置值    
    obj.chkindex = -1;			//当前改变颜色的行号，即高亮显示的行号
    obj.tbId = "tbKeywordList";		//要控制效果的表格ID名
    obj.divId = "tbKeywordListdiv";		//表格所在DIV
    obj.divWidth = "182px";		//表格所在DIV宽度
    obj.newColor = "#E0E0E0";   //高亮显示颜色
    obj.oldColor = "#FFFFFF";   //普通颜色
    obj.maxResult = 16;			//最多显示结果数
    //需要由外部指定的值    
    obj.txtId = "";					//产生该效果时光标所在文本框的ID号，即在哪个文本框中输入数据时会显示这个表格
    obj.requestTxtURL = "";			//Ajax服务器页面地址，用于为文本框赋值
   
    obj.valueArray = new Array();   //利用Ajax获得的表格里的值组合，
    obj.scrollValue = 0;        //指示当DIV出现滚动条时按下方向键滚动条应滚动的高度

    obj.bFirstUpDown = true;	//标志是首次按键盘的上下键
    obj.strResult = "";			//cgi返回的数据
	obj.strText = "";			//文本框的内容，因为输入中文时有按键事件但字不上屏时防止调用ajAx
	obj.resultCount = 0;
	
    //当按下向上键
    obj.MoveUp = function()
            {
                var tbobj = document.getElementById(obj.tbId);
                var trobj = tbobj.getElementsByTagName("tr");
                if(trobj.length  == 0)
                    return;
                else
                {
                    trobj[obj.chkindex].style.backgroundColor = obj.oldColor;   //恢复之前一行的颜色
                    if(obj.chkindex == 0)   //如果当前是第一行，则转到倒数第二行
                        obj.chkindex = trobj.length - 3;
                    else
                        obj.chkindex = obj.chkindex - 1;
					
					obj.bFirstUpDown = false;
					trobj[obj.chkindex].focus();
                    trobj[obj.chkindex].style.backgroundColor = obj.newColor;   //设置新行颜色
                    obj.scrollValue = (obj.chkindex + 1) * 22 - 135;
                    document.getElementById(obj.divId).scrollTop = obj.scrollValue;
                }
            }

    //当按下向下键
    obj.MoveDown = function()
                {
                    if(obj.chkindex == -1)
                    {
                        obj.chkindex = 0;
                    }
                    
                    var tbobj = document.getElementById(obj.tbId);
                    var trobj = tbobj.getElementsByTagName("tr");
					if(trobj.length  == 0)
                    {
                        return;
                    }
                    else
                    {
                        trobj[obj.chkindex].style.backgroundColor = obj.oldColor;
                        if(obj.chkindex < trobj.length - 3 && obj.bFirstUpDown == false)
                            obj.chkindex = obj.chkindex + 1;
                        else
                            obj.chkindex = 0;
						obj.bFirstUpDown = false;
                        trobj[obj.chkindex].style.backgroundColor = obj.newColor;
                        trobj[obj.chkindex].focus();
                        obj.scrollValue = (obj.chkindex + 1) * 22 - 135;
                        document.getElementById(obj.divId).scrollTop = obj.scrollValue;
                    }
                }
                
    //根据传入的一个一维数组为表格重新填充内容
    obj.CreateNewTable = function(_valueArray)
                {
					obj.bFirstUpDown = true;
					document.getElementById(obj.divId).style.display = "";
					document.getElementById(obj.tbId).style.display = "";
					var tb = document.getElementById(obj.tbId);
					tb.removeChild(tb.childNodes[0]);     //删除所有单元行
					var header = tb.createTHead();

					//var resultCnt = obj.valueArray.length < obj.maxResult ? obj.valueArray.length : obj.maxResult;
					var i = 0;
					for(; i < _valueArray.length && i < obj.maxResult; i++)
					{
						var rowValue = _valueArray[i];
						var bodyRow = header.insertRow(i);    
						bodyRow.id = "bodyRow" + parseInt(i);
						bodyRow.attachEvent("onclick", obj.ChangeTbOnClick);
						bodyRow.attachEvent("onmousemove", obj.MouseMove);
						bodyRow.style.cursor = "hand";
						bodyRow.style.padding = "0 3px 0 3px";
                        bodyRow.style.backgroundColor = obj.oldColor;
                        
						var cell = bodyRow.insertCell(0);
						cell.innerHTML = rowValue;       //将第i行的值存入td里。
					}

					var bodyRow = header.insertRow(i);    					
					var cell = bodyRow.insertCell(0);
					var strHint = "";
					if(_valueArray.length > obj.maxResult) 
					{
                        strHint = "还有" + (_valueArray.length -  obj.maxResult) + "条记录未显示 ";
                    }
					else
					{
					    strHint = "";
					}
					cell.innerHTML = "<table align=left width=100% border='0' cellpadding='0' cellspacing='0'><tr><td class='fontblue' align=left width=80%>" + strHint + "</td><td align=right width=20% class='fontblue'><a href='#' onclick='document.getElementById(\""+ obj.divId +"\").style.display = \"none\";document.getElementById(\""+ obj.txtId +"\").focus();return false;' class='fontblue red'>隐藏</a></td></tr></table>";       //最末行的关闭按键。
					bodyRow.style.padding = "0 3px 0 3px";
                    bodyRow.style.backgroundColor = obj.oldColor;
					obj.scrollValue = 0;                        //每次刷新表格内容后将滚动条应滚动的高度置为0			
		
                }

	//鼠标移动时，高亮所指的行
	obj.MouseMove = function()            
				{
					var eventId = event.srcElement.parentElement.id;
					var eventIndex = eventId.substring(7,eventId.length);					
					var tbobj = document.getElementById(obj.tbId);
					var trobj = tbobj.getElementsByTagName("tr");
                                        
                                        if(obj.chkindex == -1)
                                        {
                                                obj.chkindex = 0;
                                        }
					if(trobj.length != 0)
					{
						trobj[obj.chkindex].style.backgroundColor = obj.oldColor;
						obj.chkindex = parseInt(eventIndex);        
						trobj[obj.chkindex].style.backgroundColor = obj.newColor;
					}
				}            

    //当焦点在表格上时可用鼠标进行操作
    obj.ChangeTbOnClick = function()
                {
                    var eventId = event.srcElement.parentElement.id;
                    var eventIndex = eventId.substring(7,eventId.length);

					var tbobj = document.getElementById(obj.tbId);
					var trobj = tbobj.getElementsByTagName("tr");
					if(trobj.length > obj.chkindex + 1)
						trobj[obj.chkindex].style.backgroundColor = obj.oldColor;
					obj.chkindex = parseInt(eventIndex);
					trobj[obj.chkindex].style.backgroundColor = obj.newColor;

                    var txt = document.getElementById(obj.txtId);
                    txt.focus();
                    var rng = txt.createTextRange();   
                    rng.moveStart("character", document.getElementById(obj.txtId).value.length + 1);   //将光标定在文本框内容的结尾处
                    rng.select();
					document.getElementById(obj.divId).style.display = "";
					event.keyCode = '13';       //将按键值设定为回车
                    obj.ManageMove();   //触发文本框的按键事件
                    
                }
                
    //获取高亮显示的那一行每一列的值
    obj.GetTableData = function()
                {
                    var tbobj = document.getElementById(obj.tbId);
                    var trobj = tbobj.getElementsByTagName("tr");
                    //当页面刚加载时，没有获取到的对象为空
					if(trobj.length != 0)
					{
						var tdobj = trobj[obj.chkindex].getElementsByTagName("td");
						obj.strText = tdobj[0].innerHTML.replace(/<B>|<\/B>/g, "");
					}
                }

	//根据输入获取数据，ajax
    obj.RequestTbData = function(txtVal)
                {
                    obj.strText = txtVal;
					//getstr = "kw="+encodeURIComponent(obj.strText);
getstr = "kw="+obj.strText;
					//ajaxpack.postAjaxRequest("http://datalib.qqinternal.com/cgi-bin/car_public/get_keyword_tips", getstr, obj.FixTips, "txt");
					JsLoader.load("http://cgi.data.auto.qq.com/cgi-bin/car_public/get_keyword_tips?" + getstr, function(){
					                    obj.valueArray = arrKeyword;
					                    if(obj.valueArray.length > 0 && obj.valueArray.length < 9000)
                                        {
                                            obj.CreateNewTable(obj.valueArray); //更新表格内容
                                            obj.DisplayTb();						
                                        }
                                        else
                                        {
                                            document.getElementById(obj.divId).style.display = "none";
                                            document.getElementById(obj.tbId).style.display = "none";
                                        }
                                        
                                        obj.strResult = "";                        		
                        	});  
                        	            
                }

	//分析ajax返回的数据，存入obj.valueArray数组，并显示
	
   obj.FixTips = function()
			   {
					var myajax=ajaxpack.ajaxobj;
					if (myajax.readyState == 4)
					{ //if request of file completed
						if (myajax.status==200 || window.location.href.indexOf("http")==-1)//if request was successful or running script locally
						{
						    obj.strResult = myajax.responseText;
						    alert(myajax.responseText);
							obj.strResult = obj.strResult.replace(/\n/g, "");//除去string最后的\n
							obj.strResult = obj.strResult.replace(/;$/g, "");//除去string最后的;

							obj.valueArray = new Array();
							var temp = obj.strResult.split(";");
							for(var i = 0; i < temp.length - 1; i++)
							{
								obj.valueArray[i] = temp[i];								
							}
							//obj.resultCount = temp[temp.length - 1];
						}
						 if(obj.strResult != "")
						{
							obj.CreateNewTable(obj.valueArray); //更新表格内容
							obj.DisplayTb();						
						}
						else
						{
							document.getElementById(obj.divId).style.display = "none";
							document.getElementById(obj.tbId).style.display = "none";
						}

						obj.strResult = "";
					}
					
			   }
    
    //根据后续输入,过滤第一次加载的数据
    obj.filterArray = function(sInput)
			   {
			        var arrReturn = new Array();
			        var nReturnIndex = 0;
					for(var i = 0; i < obj.valueArray.length; i++)
					{
					    if(obj.valueArray[i].toLowerCase().indexOf(sInput.toLowerCase()) == 0)
					    {
					        arrReturn[nReturnIndex] = obj.valueArray[i];
					        nReturnIndex++;					        
					    }
					    else if(nReturnIndex > 0)
						{
						    break;
						}
					}
					return arrReturn;
			   }
			   
    
    //定义按键事件
    obj.ManageMove = function()
                {
                    if(obj.tbId == "")     //确保当未初始化或参数不正确时浏览器不报错
                        return;
                    
                    if(event.keyCode == '13' && (document.getElementById(obj.divId).style.display == "none" || obj.chkindex == -1))
                    {
                        if(checkKeywordSearch())
                        {
                            document.frmKeywordSearch.submit();                            
                        }
                        return;
                    }
                    if(event.keyCode == '38')
                    {
                        obj.MoveUp();
                        return;
                    }
                    if(event.keyCode == '40')
                    {
                        obj.MoveDown();
                        return;
                    }

					var tmpTxt = document.getElementById(obj.txtId).value.replace(/　/g, " ").replace(/^\s*/g, "");
					
					if(tmpTxt == "")
					{
						obj.strText = "";
					}
                    else if(event.keyCode == '13' && obj.chkindex >= 0 && document.getElementById(obj.divId).style.display != "none")   //当标志指向表头且显示提示div时响应回车事件
                    {                        
						obj.GetTableData();					//获得高亮显示的那一行的值
						document.getElementById(obj.txtId).value = obj.strText;							
						document.getElementById(obj.divId).style.display = "none";
						//document.getElementById(obj.tbId).style.display = "none";
						obj.chkindex = -1;
						obj.scrollValue = 0; 
						return;
                    }
					//输入字符串不仅仅是在末尾改变时，或者输入框为空时，停止提示
					//if((tmpTxt.indexOf(obj.strText) != 0 &&
					//	obj.strText.indexOf(document.getElementById(obj.txtId).value.replace(/^\s*/g, "")) != 0) ||
					//	tmpTxt == "")
					if(tmpTxt == "")
					{
					    document.getElementById(obj.divId).style.display = "none";
						obj.chkindex = -1;
						obj.scrollValue = 0;        
					}
					else if(obj.strText.substr(0,1) == tmpTxt.substr(0,1) //只要第一个字没有变，就不需要从新拉取
					       && obj.valueArray.length > 0) 
					{
					    obj.chkindex = -1;
					    var arrTemp = obj.filterArray(tmpTxt);
					    if(arrTemp.length > 0)
					    {
					        obj.CreateNewTable(arrTemp);					    
					    }
					    else
					    {
					        document.getElementById(obj.divId).style.display = "none";
						    obj.scrollValue = 0;     
					    }
					}
					else
                    {
                        obj.chkindex = -1;
                        obj.RequestTbData(tmpTxt);    //先获得用于填充表格的数据    
                    }
                }

    //控制显示位置
    obj.DisplayTb = function()
                {				
                    var tb = document.getElementById(obj.divId);
                    var txt = document.getElementById(obj.txtId);
                    tb.style.position = "absolute";
                    tb.style.display = "";

					var scrollTop, scrollLeft; 
					if (typeof window.pageYOffset != 'undefined') { 
					   scrollTop = window.pageYOffset; 
					   scrollLeft = window.pageXOffset; 
					} 
					else if (typeof document.compatMode != 'undefined' && 
						 document.compatMode != 'BackCompat') { 
					   scrollTop = document.documentElement.scrollTop; 
					   scrollLeft = document.documentElement.scrollLeft; 
					} 
					else if (typeof document.body != 'undefined') { 
					   scrollTop = document.body.scrollTop; 
					   scrollLeft = document.body.scrollLeft; 
					} 

                    tb.style.top = parseInt(txt.getBoundingClientRect().top) + parseInt(txt.clientHeight) - 2 + scrollTop + 5;
                    tb.style.left = parseInt(txt.getBoundingClientRect().left) - 2 + scrollLeft;
					tb.style.width = obj.divWidth;
                }

/*    obj.DisplayNone = function()
                {				
                    document.getElementById(obj.divId).style.display = "none";
                }
*/
    obj.EndBind = function()
                {
                    obj.tbId = "";
                }
    //入口函数
    obj.BindTextInput = function(_txtId, _width)
                {
                    if(_txtId == "" || document.getElementById(_txtId) == null)
                        return;
                    else
                    {
                        obj.txtId = _txtId; 
                        if(typeof _width != "undefined" && _width != "")
                        {
                                obj.divWidth = _width;
                        }

                        document.getElementById(obj.txtId).attachEvent("onkeyup",obj.ManageMove); //为文本框添加事件
						//document.getElementById(obj.txtId).attachEvent("onblur",obj.DisplayNone); //为文本框添加事件
                        if(document.getElementById("tbKeywordListdiv") == null)
                        {
                            var divobj = document.createElement("div");
                            divobj.id = "tbKeywordListdiv";
							divobj.style.position="absolute"
							divobj.style.left = document.getElementById(obj.txtId).getBoundingClientRect().left;
							divobj.style.top = document.getElementById(obj.txtId).getBoundingClientRect().top;
                            divobj.style.height = "auto";
                            divobj.style.overflow = "hidden";
                            divobj.innerHTML = "<table style='border:#000000 1px solid' cellpadding='0' cellspacing='0' id='tbKeywordList' style='display:none;'></table>"
                                               + "<iframe style='position:absolute; visibility:inherit; top:0px; left:0px; width:" + obj.divWidth + "; z-index:-1; filter: Alpha(Opacity=0);'></iframe>" ;
                            document.body.appendChild(divobj);
							document.getElementById("tbKeywordList").style.width = obj.divWidth;							
                        }
                    }                    
                }
    return obj;
}

function initKeyword()
{	
	var obj = InitTableDisplayChange();
	obj.BindTextInput("keyvalue","");
}/*  |xGv00|484efa74182f03ffcd38429e64918dd0 */