var menuItemArray = new Array();
var menuItemselectIndex = -1;
var isMenuShow = false;
var m_pageSize = 10;
var m_page = 1;
var sg_cache = new Object();
var isSuggested	= false;
function SB_ShowMenu(ctrlID, show){
	var menu = document.getElementById(ctrlID + "_Menu");
	var menuback = document.getElementById(ctrlID + "_Frame");
	
	if(show){
		var btn = document.getElementById("w");
		if(btn){
			var x = btn.offsetLeft;
			var y = btn.offsetTop;
			while(btn = btn.offsetParent){
				x += btn.offsetLeft;
				y += btn.offsetTop;
			}
			menu.style.left = x;
			menu.style.top = y + 20;
		}
		menu.style.display = "block";
		menuback.style.width = menu.offsetWidth;
		menuback.style.height = menu.offsetHeight;
		menuback.style.top = menu.style.top;
		menuback.style.left = menu.style.left;
		menuback.style.zIndex = menu.style.zIndex - 1;
		menu.style.display = "block";
		menuback.style.display = "block";
    		isMenuShow = true;

	}
	else{
		menu.style.display = "none";
		menuback.style.display = "none";
		isMenuShow = false;
	}
}

function SB_OnDropDown(ctrlID){
	SB_LoadMenuItemArray(ctrlID);
	document.getElementById("w").focus();
}

function SB_OnBlur(ctrlID, event){
	if (!isSuggested) return;
	SB_ShowMenu(ctrlID, false);
}

function SB_OnKeyDown(ctrlID, event){
	// 13: ENTER
	if (!isSuggested) return;
	if((!isMenuShow || menuItemselectIndex == -1) && event.keyCode == 13){
			return true;
		}
	if(event.keyCode == 13 || event.keyCode == 24) return false;
	else return true;
}

function SB_OnKeyUp(ctrlID, event){
	if (!isSuggested) return;
	var returnvalue = false;
	switch(event.keyCode){
		case 38: // UP
			SB_SetMenuItemselectIndex("OFFSET", -1);
			SB_RebuildMenuselection(ctrlID);
			break;
			
		case 40: // DOWN
			SB_SetMenuItemselectIndex("OFFSET", 1);
			SB_RebuildMenuselection(ctrlID);
			break;
			
		case 13: // ENTER
			SB_selectMenuItem(ctrlID);
                        if(!isMenuShow || menuItemselectIndex == -1){
                            returnvalue = true;
                         }
			break;
			
		case 24: // ESC
			SB_ShowMenu(ctrlID, false);
			break;
		case 27: // ESC
			SB_ShowMenu(ctrlID, false);
			break;		
		default:
		
			SB_LoadMenuItemArray(ctrlID);
			returnvalue = true;
			break;
	}
	return returnvalue;
}

function SB_selectMenuItem(ctrlID){
	var text = "";
	var menu = document.getElementById(ctrlID + "_Menu");
	var menuItemList = menu.childNodes;
	for(var i=0; i< menuItemList.length; i++){
		if(i == menuItemselectIndex){
			text = menuItemList[i].innerHTML;
			break;
		}
	}
	
	if(text != "") document.getElementById("w").value = text;
	SB_ShowMenu(ctrlID, false);
	checkword1(frmsearchhead.w, frmsearchhead.c.value);
	return false;
}

function SB_SetMenuItemselectIndex(action, index){
	if(action == "SET")
		menuItemselectIndex = index;
	if(action == "OFFSET") 
		menuItemselectIndex += index;
		
	if(menuItemArray && menuItemselectIndex < 0) menuItemselectIndex = menuItemArray.length -1;
	if(menuItemArray && menuItemselectIndex >= menuItemArray.length) menuItemselectIndex = 0;
}

function SB_RebuildMenu(ctrlID){
	var html = "";
	var start = 0;
	if(m_page <= 0) m_page = 1;
	var maxPage = parseInt((menuItemArray.length + m_pageSize - 1)/m_pageSize);
	if(m_page > maxPage) m_page = maxPage;
	start = (m_page - 1)* m_pageSize;
	for(var i= start; i<menuItemArray.length && i < start + m_pageSize; i++){
		html += "<div";
		html += " onmousedown=\"SB_selectMenuItem('" + ctrlID + "');Logger('suggestedsearch');\"";
		html += " onmouseover=\"SB_SetMenuItemselectIndex('SET', " + i + "); SB_RebuildMenuselection('" + ctrlID + "');\"";
		html += " onBlur=\"return SB_ShowMenu('" + ctrlID + "', true);\"";
		html += ">";
		html += menuItemArray[i];
		html += "<\/div>";
	}
	html += "<div align=\"center\" style=\"text-align:center; background:#FFE3E2; color:#000000; margin-top:0px; line-height:20px\">建议搜索：帮您选择更精准的关键词<\/div>";
	document.getElementById(ctrlID + "_Menu").innerHTML = html;
	
	menuItemselectIndex = -1;
}

function SB_RebuildMenuselection(ctrlID){
	var menu = document.getElementById(ctrlID + "_Menu");
	var menuItemList = menu.childNodes;
	for(var i=0; i< menuItemList.length; i++){
		if(i == menuItemselectIndex) menuItemList[i].className = "MB_MenuSelectedItem";
		else menuItemList[i].className = "";
	}
}

function SB_LoadMenuItemArray(ctrlID){

var v=document.getElementById("w").value;
    if(v ==""){
        SB_ShowMenu(ctrlID, false);
        return;
    }
  if( v.length < 1 || v.length >20){
         SB_ShowMenu(ctrlID, false);
         return;
  }
  menuItemArray = sg_cache[v];
  if(typeof menuItemArray =='undefined'){
     menuItemArray = null;
     SB_LoadIt(ctrlID,v);
  }else{
    if(menuItemArray && menuItemArray.length > 0){
          showMenuNeeded = true;
          SB_RebuildMenu(ctrlID);
          SB_ShowMenu(ctrlID, true);
    }else{
    	SB_ShowMenu(ctrlID, false);
    }
  }
    
}
function SB_LoadIt(ctrlID,v){
		
	var httpRequest = SB_GetHttpRequest();
        sg_cache[v] = null;
	httpRequest.onreadystatechange = function()
	{
		if(httpRequest.readyState == 1)// 开始加载
		{
			//html = "数据载入中...";
		}
		
		if(httpRequest.readyState == 4)	// 调用完毕
		{
			if(httpRequest.status == 200) // 加载成功
			{
				var showMenuNeeded = false;
				try{
					var txt = httpRequest.responseText;
					if(txt != null && txt.length >0){
					  txt = UrlDecode(txt);
					  var jo = eval('(' + txt + ')');
					  menuItemArray = jo.words;
					  if(menuItemArray && menuItemArray.length > 0){
							showMenuNeeded = true;
                                                        sg_cache[v] = menuItemArray;
					  }
					}
				}catch(e){}
				if(showMenuNeeded){
					SB_RebuildMenu(ctrlID);
					SB_ShowMenu(ctrlID, true);
				}
				else{
					SB_ShowMenu(ctrlID, false);
				}
			}
		}
	}
	try{
		var url='http://www.search.hc360.com/cgi-bin/checkword?w=' + trim(v) + '&type=1';
		//var url='http://www.search.hc360.com/nnn.html?w=' + trim(v) + '&type=1';
		httpRequest.open("get", url, true);
		//httpRequest.setRequestHeader("Content-Type", "text/xml");
		//httpRequest.setRequestHeader("charset", "GBK");
		httpRequest.send(null);
	} catch(e) {}
}

function SB_GetHttpRequest(){
	var httpRequest;
	
	if (window.XMLHttpRequest){ // Mozilla, Safari,...
		httpRequest = new XMLHttpRequest();

		if (httpRequest.overrideMimeType){
			httpRequest.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject){ // IE
		try{
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
			
		}
		catch(e){
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				
			} 
			catch(e){}
		}
	}
	
	return httpRequest;
}

function isWhitespace(charToCheck) {	
	var whitespaceChars = " \t\n\r\f";	
	return (whitespaceChars.indexOf(charToCheck) != -1);
}

function ltrim(str) { 	
	for(var k = 0; k < str.length && isWhitespace(str.charAt(k)); k++);	
		return str.substring(k, str.length);
}

function rtrim(str) {	
	for(var j=str.length-1; j>=0 && isWhitespace(str.charAt(j)) ; j--) ;	
		return str.substring(0,j+1);
}

function trim(str) {	
	return ltrim(rtrim(str));
}

/*这里开始时UrlEncode和UrlDecode函数*/ 

function UrlDecode(str){ 
/*  var ret=""; 
  for(var i=0;i<str.length;i++){ 
   var chr = str.charAt(i); 
    if(chr == "+"){ 
      ret+=" "; 
    }else if(chr=="%"){ 
     var asc = str.substring(i+1,i+3); 
     if(parseInt("0x"+asc)>0x7f){ 
      ret+=String.fromCharCode(parseInt("0x"+asc+str.substring(i+4,i+6))); 
      i+=5; 
     }else{ 
      ret+=String.fromCharCode(parseInt("0x"+asc)); 
      i+=2; 
     } 
    }else{ 
      ret+= chr; 
    } 
  } 
  return ret; 
  */
	return  unescape(decodeURI(str));
} 

function tenTo16(tenN)
{
 if(tenN<16)
 {
  return "0"+ox16(tenN);
 }
 else
 {
  var ch1="";
  var ch2="";
  
  ch1=ox16(tenN%16);
  ch2=ox16((tenN-tenN%16)/16);
  return ""+ch2+ch1;
 }
 
}

function ox16(x)
{
 if(x==10)
  return "A";
 if(x==11)
  return "B";
 if(x==12)
  return "C";
 if(x==13)
  return "D";
 if(x==14)
  return "E";
 if(x==15)
  return "F";
 if(x<10)
  return x;
 if(x==0)
  return "0";
 
 
}


