//sfw[instance] 为输入文本框对象 sfw[instance].name为输入文本框的name属性
var sfw = new Array();
String.prototype.decode = function()
{
 	return decodeURI(this); //返回所有值
};

String.prototype.encode = function()    //对检索条件进行编码
{
	 var result = "";
	 if(this == "") return this;
	
	 if(typeof encodeURIComponent == "function")
	 {
	  result = encodeURIComponent(this);
	  
	 }
	 else
	 {
		  var alpha  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
		  var string = this.toUTF8();
		  result = "";
		  for(var i = 0; i < string.length; i++)
		  {
			   if(alpha.indexOf(string.charAt(i)) == -1)
			    result += "%" + string.charCodeAt(i).toHex();
			   else
			    result += string.charAt(i);
		  }
	 }
 //alert(result);
 return result;
};

String.prototype.toHex = function()
{
	 var hex = "0123456789ABCDEF";
	 //alert("123213"+hex.charAt(this.value >> 4) + hex.charAt(this.value & 0xF));
	 return hex.charAt(this.value >> 4) + hex.charAt(this.value & 0xF);
};

String.prototype.toUTF8 = function()
{
	 var a, b, i = 0;
	 var result  = "";
	
	 while(i < this.length)
	 {
		  a = this.charCodeAt(i++);
		  if(a >= 0xDC00 && a < 0xE000) continue;
		  if(a >= 0xD800 && a < 0xDC00)
		  {
			   if(i >= this.length) continue;
			 	  b = this.charCodeAt(i++);
			   if(s < 0xDC00 || a >= 0xDE00) continue;
			  	 a = ((a - 0xD800) << 10) + (b - 0xDC00) + 0x10000;
		  }
		
		  if(a < 0x80) 
		  	 result += String.fromCharCode(a);
		  else if(a < 0x800)
		  	 result += String.fromCharCode(0xC0 + (a >> 6), 0x80 + (a & 0x3F));
		  else if(a < 0x10000)
		 	  result += String.fromCharCode(0xE0 + (a >> 12), 0x80 + (a >> 6 & 0x3F), 0x80 + (a & 0x3F));
		  else
		  	 result += String.fromCharCode(0xF0 + (a >> 18), 0x80 + (a >> 12 & 0x3F), 0x80 + (a >> 6 & 0x3F), 0x80 + (a & 0x3F));
	 }
	 return result;
};

String.prototype.trim = function()
{
 return this.replace(/^[\s]+|[\s]+$/, "");
};
//创建文本框对象 
function sfwCreate(instance)
{
 if(sfw[instance].name && sfw[instance].action)
 {
  sfw[instance].inputContainer = document.getElementById(sfw[instance].name);
  sfw[instance].inputContainer.autocomplete = "off";
  sfw[instance].inputContainer.onblur       = function() { sfwHideOutput(instance); };
  sfw[instance].inputContainer.onclick      = function() { sfwShowOutput(instance); };
  sfw[instance].inputContainer.onfocus      = function() { sfwShowOutput(instance); };
  sfw[instance].inputContainer.onkeypress   = function(event) {if(sfwGetKey(event) == 13) return false;};
  sfw[instance].inputContainer.onkeydown    = function(event) { sfwProcessKeys(instance, event); };
  sfw[instance].inputContainer.onkeyup   = function(event)	
{
	if(sfwGetKey(event) == 13)
	{
		defaultSubmit(event)
	}
	else if(sfwGetKey(event) != 40 && sfwGetKey(event) != 38)
  	{	
  		sfwQuery(instance)
  	}
  };
  sfw[instance].outputContainer = document.createElement("div"); //创建显示列表的div
  sfw[instance].outputContainer.id             = sfw[instance].name + "_list"; //给该div赋值id属性
  sfw[instance].outputContainer.className      = "SuggestFramework_List"; //赋值样式
  sfw[instance].outputContainer.style.position = "absolute"; //
  sfw[instance].outputContainer.style.zIndex   = "9999"; //设置z-index 属性
  sfw[instance].outputContainer.style.width    = sfw[instance].inputContainer.clientWidth + "px";
  sfw[instance].outputContainer.style.wordWrap = "break-word";
  sfw[instance].outputContainer.style.cursor   = "default";
  sfw[instance].inputContainer.parentNode.insertBefore(sfw[instance].outputContainer, sfw[instance].inputContainer.nextSibling);
  sfw[instance].inputContainer.parentNode.insertBefore(document.createElement("br"), sfw[instance].outputContainer);

  if(sfw[instance].columns > 1 && sfw[instance].capture > 1)
  {
   sfw[instance].hiddenInput = document.createElement("input");
   sfw[instance].hiddenInput.id   = "_" + sfw[instance].name;
   sfw[instance].hiddenInput.name = "_" + sfw[instance].name;
   sfw[instance].hiddenInput.type = "hidden";
   sfw[instance].inputContainer.parentNode.insertBefore(sfw[instance].hiddenInput, sfw[instance].inputContainer.nextSibling);
  }

  if(!sfwCreateConnection())
  {
	   sfw[instance].proxy = document.createElement("iframe");
	   sfw[instance].proxy.id = "proxy";
	   sfw[instance].proxy.style.width   = "0";
	   sfw[instance].proxy.style.height  = "0";
	   sfw[instance].proxy.style.display = "none";
	   document.body.appendChild(sfw[instance].proxy);
	
	   if(window.frames && window.frames["proxy"])
	   	 sfw[instance].proxy = window.frames["proxy"];
	   else if(document.getElementById("proxy").contentWindow)
	    	sfw[instance].proxy = document.getElementById("proxy").contentWindow;
	   else
	   	 sfw[instance].proxy = document.getElementById("proxy");
  }

  sfwHideOutput(instance);
  //sfwThrottle(instance);
 }
 else
 {
  throw 'Suggest Framework Error: Instance "' + sfw[instance].name + '" not initialized';
 }
};

function sfwCreateConnection()
{
 var asynchronousConnection;

 try
 {
  asynchronousConnection = new ActiveXObject("Microsoft.XMLHTTP");
 }
 catch(e)
 {
  if(typeof XMLHttpRequest != "undefined")
   asynchronousConnection = new XMLHttpRequest();
 }

 return asynchronousConnection;
};

function sfwGetKey(e)
{
 return ((window.event) ? window.event.keyCode : e.which);
};

function sfwHideOutput(instance)
{
 	sfw[instance].outputContainer.style.display = "none";
 	//自己添加的。设置输入框初始化
  	if(jsTrim(sfw[instance].inputContainer.value)=="" && sfw[instance].name !="mykeywordslogin")
	{
		sfw[instance].inputContainer.value="查找您需要的产品、服务、公司、人脉、关系...";
		sfw[instance].inputContainer.style.color="#cccccc";
	}
	else
	{ 	
		if(jsTrim(sfw[instance].inputContainer.value)=="查找您需要的产品、服务、公司、人脉、关系..." ||jsTrim(sfw[instance].inputContainer.value)=="")
			sfw[instance].inputContainer.style.color="#cccccc";
		else
			sfw[instance].inputContainer.style.color="#000000";
	}
};

//鼠标向下移动
function sfwHighlight(instance, index)
{
 sfw[instance].suggestionsIndex = index;
 for(var i in sfw[instance].suggestions)
 {
  var suggestionColumns = document.getElementById(sfw[instance].name + "_suggestions[" + i + "]").getElementsByTagName("td");
  for(var j in suggestionColumns)
   suggestionColumns[j].className = "SuggestFramework_Normal";
 }

 var suggestionColumns = document.getElementById(sfw[instance].name + "_suggestions[" + sfw[instance].suggestionsIndex + "]").getElementsByTagName("td");
 for(var i in suggestionColumns)
  suggestionColumns[i].className = "SuggestFramework_Highlighted";
  
  document.getElementById(sfw[instance].name).value = document.getElementById("tdValue"+index).innerHTML;
};

function sfwIsHidden(instance)
{
 return ((sfw[instance].outputContainer.style.display == "none") ? true : false);
};

function sfwProcessKeys(instance, e)
{
 var keyDown   = 40;
 var keyUp     = 38;
 var keyTab    = 9;
 var keyEnter  = 13;
 var keyEscape = 27;

 if(!sfwIsHidden(instance))
 {
  switch(sfwGetKey(e))
  {
   case keyDown:   sfwSelectNext(instance);     return;
   case keyUp:     sfwSelectPrevious(instance); return;
   case keyEnter:  sfwSelectThis(instance);     return;
   case keyTab:    sfwSelectThis(instance);     return;
   case keyEscape: sfwHideOutput(instance);     return;
   default: return;
  }
 }
};

function sfwProcessProxyRequest(instance)
{
 var result = ((sfw[instance].proxy.document) ? sfw[instance].proxy.document : sfw[instance].proxy.contentDocument);
 result = result.body.innerHTML.replace(/\r|\n/g, " ").trim();

 if(typeof eval(result) == "object")
  sfwSuggest(instance, eval(result));
 else
  setTimeout("sfwProcessProxyRequest(" + instance + ")", 10);
};

function sfwProcessRequest(instance)
{
 if(sfw[instance].connection.readyState == 4)
 {
  if(sfw[instance].connection.status == 200)
   sfwSuggest(instance, eval(sfw[instance].connection.responseText));
 }
};

function sfwQuery(instance)  //设置 URL  提交action
{
 //sfwThrottle(instance);
 var phrase = sfw[instance].inputContainer.value;
 if(phrase == "" || phrase == sfw[instance].previous) return;
 sfw[instance].previous = phrase;
 if (sfw[instance].inputContainer.value != '' && sfw[instance].inputContainer.value != '查找您需要的产品、服务、公司、人脉、关系...'){
 var url = sfw[instance].action + "?type=" + sfw[instance].name + "&q=" + encodeURI(phrase);
  //  alert("url:"+url);
 sfwRequest(instance, url);
 }
};

function sfwRequest(instance, url)
{
   // alert("url:"+url);
 if(sfw[instance].connection = sfwCreateConnection())
 {
  sfw[instance].connection.onreadystatechange = function() { sfwProcessRequest(instance) };
  
  sfw[instance].connection.open("GET", url, true);
  sfw[instance].connection.send(null);
 }
 else
 {
  sfw[instance].proxy.location.replace(url);
  sfwProcessProxyRequest(instance);
 }
};

function sfwSelectThis(instance, index)
{
 if(sfw[instance].columns > 1 && sfw[instance].capture > 1)
  sfw[instance].hiddenInput.value = sfw[instance].suggestions[sfw[instance].suggestionsIndex][sfw[instance].capture - 1];

 if(!isNaN(index)) 
 { 
 	sfw[instance].suggestionsIndex = index; 
 }

 var selection = sfw[instance].suggestions[sfw[instance].suggestionsIndex];
 if(sfw[instance].columns > 1) 
 { 
 	selection = selection[0]; 
 }
 sfw[instance].inputContainer.value = selection;
 sfw[instance].previous = selection;
 sfwHideOutput(instance);
 
if( jsTrim(sfw[instance].inputContainer.value)!="查找您需要的产品、服务、公司、人脉、关系..." && jsTrim(sfw[instance].inputContainer.value)!="")
{
	defaultSearch(sfw[instance].inputContainer.value,"")
}
};

function sfwSelectNext(instance)
{
 sfwSetTextSelectionRange(instance);
 if(typeof sfw[instance].suggestions[(sfw[instance].suggestionsIndex + 1)] != "undefined")
 {
  if(typeof sfw[instance].suggestions[sfw[instance].suggestionsIndex] != "undefined")
   document.getElementById(sfw[instance].name + "_suggestions[" + sfw[instance].suggestionsIndex + "]").className = "SuggestFramework_Normal";
  sfw[instance].suggestionsIndex++;
  sfwHighlight(instance, sfw[instance].suggestionsIndex);
 }
};

function sfwSelectPrevious(instance)
{
 sfwSetTextSelectionRange(instance);
 if(typeof sfw[instance].suggestions[(sfw[instance].suggestionsIndex - 1)] != "undefined")
 {
  if(typeof sfw[instance].suggestions[sfw[instance].suggestionsIndex] != "undefined")
   document.getElementById(sfw[instance].name + "_suggestions[" + sfw[instance].suggestionsIndex + "]").className = "SuggestFramework_Normal";
  sfw[instance].suggestionsIndex--;
  sfwHighlight(instance, sfw[instance].suggestionsIndex);
 }
};

function sfwSetTextSelectionRange(instance, start, end)
{
 if(!start) var start = sfw[instance].inputContainer.value.length;
 if(!end)   var end   = sfw[instance].inputContainer.value.length;

 if(sfw[instance].inputContainer.setSelectionRange)
 {
  sfw[instance].inputContainer.setSelectionRange(start, end);
 }
 else if(sfw[instance].inputContainer.createTextRange)
 {
  var selection = sfw[instance].inputContainer.createTextRange();
  selection.moveStart("character", start);
  selection.moveEnd("character", end);
  selection.select();
 }
};

function sfwShowOutput(instance)
{
 if(typeof sfw[instance].suggestions != "undefined" && sfw[instance].suggestions.length)
  sfw[instance].outputContainer.style.display = "block";
  if( sfw[instance].inputContainer.value=="查找您需要的产品、服务、公司、人脉、关系...")
	{
		 sfw[instance].inputContainer.value='';
		 sfw[instance].inputContainer.style.color='#000000';
	}
};

//得到数据，拼成html代码赋值给sfw[instance].outputContainer.innerHTML
function sfwSuggest(instance, list)
{
 sfw[instance].suggestions               = list;
 sfw[instance].suggestionsIndex          = -1;
 sfw[instance].outputContainer.innerHTML = "";

 var table = '<table style="width:100%;margin:0;padding:0;background-color:#FFFFFF" cellspacing="0" cellpadding="0" >';
 if(sfw[instance].heading && sfw[instance].suggestions.length)
 {
 	//该变量用来判断是否有结果
 	  var fal = false;
	  var heading = sfw[instance].suggestions.shift();
	  var thead   = '<thead>';
	  var headingContainer = '<tr>';
	  for(var i = 0; i < sfw[instance].columns; i++)
	  {
		   var value  = (String) ((sfw[instance].columns > 1) ? heading[i] : heading);
		   var column = '<td class="SuggestFramework_Heading"';
		   if(sfw[instance].columns > 1 && i == sfw[instance].columns - 1)
		    column += ' style="text-align: right"';
		   column += '>' + value.decode().trim() + '</td>';
		   headingContainer += column;
	  }
	  headingContainer += '</tr>';
	  thead  += headingContainer;
	  thead  += '</thead>';
	  table  += thead;
 }
 var tbody = '<tbody>';
 for(var i in sfw[instance].suggestions)
 {
 	/*循环二维数组的两列
	  var suggestionContainer = '<tr id="' + sfw[instance].name + '_suggestions[' + i + ']">';
	  for(var j = 0; j < sfw[instance].columns; j++)
	  {
		   var value  = (String) ((sfw[instance].columns > 1) ? sfw[instance].suggestions[i][j] : sfw[instance].suggestions[i]);
		   var column = '<td class="SuggestFramework_Normal"';
		   if(sfw[instance].columns > 1 && j == sfw[instance].columns - 1)
		    column += ' style="text-align: right"';
		   column += '>' + value.decode().trim() + '</td>';
		   suggestionContainer += column;
	  }
	   */
	   //循环二维数组的一列
	   fal = true;
	  var suggestionContainer = '<tr id="' + sfw[instance].name + '_suggestions[' + i + ']">';
	  for(var j = 0; j < sfw[instance].columns; j++)
	  {
		  var value  = (String) ((sfw[instance].columns > 1) ? sfw[instance].suggestions[i][j] : sfw[instance].suggestions[i]);
		  if(sfw[instance].columns <= 1 || j != sfw[instance].columns - 1)
		  {
			   var column = '<td class="SuggestFramework_Normal" id="tdValue'+i+'"';
			   column += '>' + value.decode().trim() + '</td>';
			   suggestionContainer += column;
		   }
	  }
	  suggestionContainer += '</tr>';
	  table += suggestionContainer;
 }
 tbody += '</tbody>';
 table += tbody;
 
 //判断返回结果是否为0
 table += '</table>';
 if(fal)
 {
 	table += '<div style="float:right;font-size:15px;background-color:#FFFFFF;margin-top:8px;margin-bottom:5px;"><a href="#none">关闭</a></div>';
 	
 }
 else
 {
 	sfw[instance].outputContainer.style.display = "none";
 }
 sfw[instance].outputContainer.innerHTML = table;
 
 for(var i in sfw[instance].suggestions)
 {
  var row = document.getElementById(sfw[instance].name + '_suggestions[' + i + ']');
  row.onmouseover = new Function("sfwHighlight(" + instance + ", " + i + ")");
  row.onmousedown = new Function("sfwSelectThis(" + instance + ", " + i + ")");
 }
 sfwShowOutput(instance);
};

function sfwThrottle(instance)
{
 	//setTimeout("sfwQuery(" + instance + ")", 10000);
};

//初始化方法。得到文本框对象属性
function initializeSuggestFramework()
{
 function getAttributeByName(node, attributeName)
 {
  if(typeof NamedNodeMap != "undefined")
  {
   if(node.attributes.getNamedItem(attributeName))
    return node.attributes.getNamedItem(attributeName).value;
  }
  else
  {
   return node.getAttribute(attributeName);
  }
 }

 var inputElements = document.getElementsByTagName("input");

 try
 {
  for(var instance = 0; instance < inputElements.length; instance++)
  {
   if(getAttributeByName(inputElements[instance], "name") &&
      getAttributeByName(inputElements[instance], "type") == "text" &&
      getAttributeByName(inputElements[instance], "action"))
   {
    sfw[instance] = new Object();
    sfw[instance].action  = getAttributeByName(inputElements[instance], "action");
    sfw[instance].capture = 1;
    sfw[instance].columns = 1;
    sfw[instance].delay   = 1000;
    sfw[instance].heading = false;
    sfw[instance].name    = getAttributeByName(inputElements[instance], "name");

    if(getAttributeByName(inputElements[instance], "capture"))
     sfw[instance].capture = getAttributeByName(inputElements[instance], "capture");
    if(getAttributeByName(inputElements[instance], "columns"))
     sfw[instance].columns = getAttributeByName(inputElements[instance], "columns");
    if(getAttributeByName(inputElements[instance], "delay"))
     sfw[instance].delay = getAttributeByName(inputElements[instance], "delay");
    if(getAttributeByName(inputElements[instance], "heading"))
     sfw[instance].heading = getAttributeByName(inputElements[instance], "heading");
    sfwCreate(instance);
   }
  }
 }
 catch(e) {}
};