var gSugCache=new Object();
var gSugFocus=false;
var gSugInputBegin=false;
var gSugLastQuery="";
var gSugTimeId=null;
var gSugItemPreId="_sug_item_";
var gSugMaxItem=-1;
var gSugLastItem=-1;
var gSugAttrs=null;
var gSugURI="";
var gSugDivID="sug_div_";

function constructSugAttr(f,i,d,infodiv){
	this.formObj=f;
	this.inputObj=i;
	this.divObj=d;
	this.infoObj=infodiv;
}
function initSugAttr(f,i,fr,t){
	gSugURI='/T_Suggestion.City_'+fr+'.Channel_'+t+'.Suggestion_';
	gSugAttrs=new constructSugAttr(f, i, document.getElementById(gSugDivID), document.getElementById("sug_info_"));
}
function closeSugDiv() {
	gSugAttrs.divObj.style.display="none";
}
function InputKeyDown(evt){
	var bCtrlDown=0;
	if(!evt && window.event){
		evt=window.event;
	}
	if(window.event){
		bCtrlDown=evt.ctrlKey;
	}else{
		bCtrlDown=(evt.modifiers & Event.CONTROL_MASK) > 0;
	}
	if(bCtrlDown){
		return true;
	}
	var kc=evt.keyCode;
	if(isCtrlKey(kc)){
		return true;
	}
	return InputRealKeyDown(kc);
}
function InputRealKeyDown(kc){
	if(isUpDownKey(kc)){
		if(gSugAttrs.divObj.style.display=="none"){
			return true;
		}
		if(kc==38){// up
			HighlightSuggestion(1, 0);
		}else if(kc==40){//down
			HighlightSuggestion(1, 1);
		}else if(kc==33){//pageup
			HighlightSuggestion(0, 0);
		}else if(kc==34){//pagedown
			HighlightSuggestion(0, -1);
		}
		return false;
	}else if(kc==13){//enter
		if(gSugAttrs.divObj.style.display=="none"){
			return true;
		}
		SelectCurrSugItem();
		return false;
	}else if(kc==27){//esc
		closeSugDiv();
		return true;
	}
	gSugInputBegin=true;
	return true;
}
function InputQuery(qstr){
	var res=null;
	if(qstr=="" || qstr.length>16){
		closeSugDiv();
		return false;
	}
	res=gSugCache[qstr];
	if(res){//hit cache
		ShowSuggestion(res);
	}else{//query network
		qstr=encodeQuery(qstr);
		ajaxGetFile(gSugURI+qstr, InputProcess);
	}
}
function InputProcess(str){
	var arr=str.split('\t');
	gSugCache[arr[0]]=str;
	ShowSuggestion(str);
}
function ShowSuggestion(str){
	var arr=str.split('\t');
	var qstr=arr[0];
	var i;
	arr.shift();
	if(!gSugFocus){
		return false;
	}
	if(gSugAttrs.inputObj.value.toLowerCase() != qstr){//查询词已经变?		return false;
	}
	if(arr.length<=1){
		closeSugDiv();
		return false;
	}
	var l=(arr.length-1)/2;
	var m="";
	var n="";
	if(l>10){l=10;}
	m+='<table border=0 cellspacing=1 cellpadding=0 width='+gSugAttrs.inputObj.offsetWidth+' bgcolor=#FFFFFF style="border:1px solid #B9C2DF"><tr><td><table border=0 cellspacing=0 cellpadding=0 width=100%>';
	for(i=0;i<l;i++){
		n=addComma(arr[i*2+1]);
		//m+='<tr id="'+gSugItemPreId+i+'" style="cursor:default" onmouseover="HighlightSuggestion(0,'+i+')" onmousedown="SelectKeyword(\''+arr[i*2]+'\');"><td align=left id="'+gSugItemPreId+"i_"+i+'">'+arr[i*2]+'</td><td align=right style="color:#4A5989">?+n+'次查?/td></tr>';
		m+='<tr id="'+gSugItemPreId+i+'" style="cursor:default" onmouseover="HighlightSuggestion(0,'+i+')" onmousedown="SelectKeyword(\''+arr[i*2]+'\');"><td align=left id="'+gSugItemPreId+"i_"+i+'">'+arr[i*2]+'</td><td align=right style="color:#4A5989"></td></tr>';
	}
	m+='</table></td></tr></table>';
	gSugAttrs.divObj.style.display="";
	gSugAttrs.infoObj.innerHTML=m;
	gSugAttrs.divObj.style.top=getDocOffsetTop(gSugAttrs.inputObj)+gSugAttrs.inputObj.offsetHeight+"px";
	gSugAttrs.divObj.style.left=getDocOffsetLeft(gSugAttrs.inputObj)+"px";
	gSugAttrs.divObj.style.width=gSugAttrs.inputObj.offsetWidth+"px";
	gSugAttrs.divObj.style.height=gSugAttrs.infoObj.offsetHeight+"px";
	gSugMaxItem=l;
	gSugLastItem=-1;
}
function SelectCurrSugItem(){
	var item=document.getElementById(gSugItemPreId+"i_"+gSugLastItem);
	if(item){
		SelectKeyword(item.innerHTML);
	}else{
		SelectKeyword(gSugAttrs.inputObj.value);
	}
}
function SelectKeyword(str){
	clearTimeout(gSugTimeId);
	gSugAttrs.inputObj.value=str;
	gSugAttrs.formObj.onsubmit();
	gSugAttrs.formObj.submit();
}
function HighlightSuggestion(type, pos){
	if(type == 0){//绝对定位
		if(pos==-1){
			pos=gSugMaxItem-1;
		}
	}else{//相对定位
		if(pos==0){//up
			pos=gSugLastItem-1;
			if(pos<0){
				pos=-1;
			}
		}else if(pos==1){//down
			pos=gSugLastItem+1;
			if(pos>=gSugMaxItem){
				pos=gSugMaxItem-1;
			}
		}
	}
	var pitem=document.getElementById(gSugItemPreId+gSugLastItem);
	var citem=document.getElementById(gSugItemPreId+pos);
	if(pitem){pitem.style.background='#FFFFFF';}
	if(citem){citem.style.background='#B9C2DF';}
	gSugLastItem=pos;
}
function InputChecking(){
	var q=gSugAttrs.inputObj.value.toLowerCase();
	if(q==""){
		gSugLastQuery=q;
		closeSugDiv();
	}else if(gSugLastQuery!=q){
		if(gSugInputBegin){
			InputQuery(q);
		}
		gSugLastQuery=q;
	}
	if(gSugFocus){
		gSugTimeId=setTimeout("InputChecking()", 10);
	}
}
function InputFocus(){// 设置定时?	gSugFocus=true;
	gSugInputBegin=false;
	gSugTimeId=setTimeout("InputChecking()", 10);
}
function InputBlur(){// 关闭定时?	gSugFocus=false;
	clearTimeout(gSugTimeId);
	closeSugDiv();
}
function isUpDownKey(kc){
	if(kc==40 || kc==38 || kc == 33 || kc== 34){//down,up,pageup,pagedown,enter
		return true;
	}else{
		return false;
	}
}
function isCtrlKey(kc){
	if(kc==16 || kc==17 || kc == 18){//shift,ctrl,alt
		return true;
	}else{
		return false;
	}
}
function addComma(aCount) {
	var retStr = "";
	var len = aCount.length;
	var first = true;
	while(len>3) {		
		retStr=","+aCount.substring(len-3,len)+retStr;
		aCount = aCount.substring(0,len-3);
		len = aCount.length;
	}
	return (aCount+retStr);
}
function encodeQuery(str){
	var i=0;
	str=encodeURI(str);
	str=str.replace(/\+/g, '%2B');
	return str;
}
