

/***********************************************
 * Global variables
 *在原有基础上增加传递object对象,
 *修改(suggest(keywords,key,object))方法
 *修改(navigate(key,object))方法
 *修改tabfix(keywords, key,object)方法
 *修改populate(a,object)方法
 ***********************************************/
var maxResults = 10;	// max # of results to display控制最大显示数
var ignoreKeys = "";

/***********************************************
 * Prototype for populating data
 ***********************************************/
function get_data() {}

/***********************************************
 * Find search keys in data set
 ***********************************************/
function suggest(keywords,key,object)
{
	//alert("line 19="+object.id);
	var results = document.getElementById("results");
	
	if(keywords != "")
	{
		var terms = get_data(); // sort? -- data should be alphabetical for best results

		var ul = document.createElement("ul");
		var li;
		var a;
		
		if ((key.keyCode == '40' || key.keyCode == '38' || key.keyCode == '13'))
		{
			navigate(key.keyCode,object);
		}
		else
		{
			var kIndex = -1;
		
			for(var i = 0; i < terms.length; i++)
			{	
				kIndex = terms[i].activity.toLowerCase().indexOf(keywords.toLowerCase());
				
//设置关键字高亮显示				
//				if(kIndex >= 0) 
//				{
					li = document.createElement("li");
					
					// setup the link to populate the search box
					a = document.createElement("a");
					a.href = "javascript://"; 
					
					a.setAttribute("rel",terms[i].val);
					a.setAttribute("rev", getRank(terms[i].activity.toLowerCase(), keywords.toLowerCase()));
					a.setAttribute("ref",terms[i].val2);
					
					if(!document.all) a.setAttribute("onclick","populate(this,object);");
					else a.onclick = function() { populate(this,object); }
					
					
					
					a.appendChild(document.createTextNode(""));
					
					if(keywords.length == 1) 
					{
						var kws = terms[i].activity.toLowerCase().split(" ");
						//alert("line 68="+kws+terms[i].val2);

						var firstWord = 0;
						
						for(var j = 0; j < kws.length; j++)
						{
						 //	if(kws[j].toLowerCase().charAt(0) == keywords.toLowerCase()) {
								
								ul.appendChild(li);
								
								if(j != 0) {
									kIndex = terms[i].activity.toLowerCase().indexOf(" " + keywords.toLowerCase());
									kIndex++;
								}
								
								break;
						//	}
						}
					}
					else if(keywords.length > 1) {
						ul.appendChild(li);
					}
					else continue;

//设置关键字高亮显示					
//					var before = terms[i].activity.substring(0,kIndex);
//					var after = terms[i].activity.substring(keywords.length + kIndex, terms[i].activity.length);
//					
	
//					a.innerHTML = before + "<strong>" + keywords.toLowerCase() + "</strong>" + after;

	                a.innerHTML = terms[i].activity;
	                
					li.appendChild(a);

//				}
			}		
			
			if(results.hasChildNodes()) results.removeChild(results.firstChild);
			
			// position the list of suggestions
			var s = document.getElementById(object.id);
			var xy = findPos(s);
	
			results.style.left = xy[0] + "px";
			results.style.top = xy[1] + s.offsetHeight + "px";
			results.style.width = s.offsetWidth + "px";
			
			// if there are some results, show them
			if(ul.hasChildNodes()) {
				results.appendChild(filterResults(ul));
				
				if(results.firstChild.childNodes.length == 1) results.firstChild.firstChild.getElementsByTagName("a")[0].className = "hover";
				
			}

		}
	}
	else
	{
		if(results.hasChildNodes()) results.removeChild(results.firstChild);
	}
}

/***********************************************
 * Rank results - used for sorting result sets
 * 0 if entire row starts with kw
 * 0 < i < 1 if any word in row starts with kw (1k char max)
 * i > 1 if row contains kw anywhere else
 ***********************************************/
function getRank(activity, keywords)
{
	var ret = -1;
	var kIndex = activity.indexOf(keywords);
	
	ret = (activity.charAt(kIndex - 1) == " ") ? kIndex : (200*kIndex);
	
	return ret;	
}

/***********************************************
 * Sort the result suggestion sets
 ***********************************************/
function filterResults(s)
{
	var sorted = new Array();
	
	for(var i = 0; i < s.childNodes.length; i++)
	{
		sorted.push(s.childNodes[i]);
	}
	
	var ul = document.createElement("ul");
	var lis = sorted.sort(sortIndex);
	
	for(var j = 0; j < lis.length; j++)
	{
		if(j < maxResults) ul.appendChild(lis[j]);
		else break;
	}

	return ul;
	
}

function sortIndex(a,b)
{
	// wow thats ugly -- need logic around grouped items getting out of order
	return (a.getElementsByTagName("a")[0].rev - b.getElementsByTagName("a")[0].rev);
}


/***********************************************
 * Navigate using up/down and submit with 'Enter'
 ***********************************************/
function navigate(key,object)
{
	var results = document.getElementById("results");
	var keyIndex = document.getElementById("keyIndex");
	
	var i = keyIndex.value;
	
	if(i == "" || !i) i = -1;
	else i = parseFloat(i);

	var ul = results.childNodes[0];

	if(ul)
	{
		if(key == '40') // DOWN
		{
			i++;
			if(i > ul.childNodes.length-1) i = ul.childNodes.length-1;
			
			keyIndex.value = i;
			
			try {
				ul.childNodes[i].getElementsByTagName("a")[0].className = "hover";
				ul.childNodes[i-1].getElementsByTagName("a")[0].className = "";
			}
			catch(e) {}
		}
		else if(key == '38') // UP
		{
			i--;
			if(i <= 0) i = 0;
			
			keyIndex.value = i;
			
			try {
				ul.childNodes[i].getElementsByTagName("a")[0].className = "hover";
				ul.childNodes[i+1].getElementsByTagName("a")[0].className = "";
			}
			catch(e) {}
		}
		else if(key == '13' || key == '9') // ENTER/TAB -- POPULATE
		{
			if(i == -1) i = 0;
			populate(ul.childNodes[i].getElementsByTagName("a")[0],object);
		}
		else return;	
	}
}

/***********************************************
 * Allow for using tab onkeydown
 ***********************************************/
function tabfix(keywords, key,object)
{
	if(key.keyCode == '9') {
		navigate(key.keyCode,object);
		return false;
	}
	else return true;
}

/***********************************************
 * Populate hidden fields via onclick on 'Enter'
 ***********************************************/
function populate(a,object)
{
	
	var ul = document.getElementById("results").childNodes[0];
	
	try {
		var pick = a.innerHTML.replace("<strong>","").replace("</strong>","");
		//alert("line 251="+a);
		//alert(a.getAttribute("ref"));
		// IE6 converts HTML elements to uppercase -- could be done with RegExp
		if(document.all) pick = a.innerHTML.replace("<STRONG>","").replace("</STRONG>","");
		
		//document.getElementById("s").value = pick;
		//document.getElementById(object.id).value = pick;
		document.getElementById(object.id).value = a.getAttribute("ref");
	}
	catch(e) {}
	
	clearSuggest();
}

/***********************************************
 * Find an elements position on the screen
 ***********************************************/
function findPos(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

/***********************************************
 * Helper to preserve onclick on suggestions
 ***********************************************/
function clearSuggest()
{
	// need a timeout so the onclick event is captured before results are hidden
	setTimeout("hideSuggest()",200);  //time set选择时间设置
}

/***********************************************
 * Hide the suggestions list and remove from DOM
 ***********************************************/
function hideSuggest()
{
	var results = document.getElementById("results");
	if(results.hasChildNodes()) results.removeChild(results.firstChild);
	
	document.getElementById("keyIndex").value = "-1"; // reset the suggestions index
}




















/***********************************************
 * Prototype for populating data
 ***********************************************/
function get_data_1() {}

/***********************************************
 * Find search keys in data set
 ***********************************************/
function suggest_1(keywords,key,object)
{
	//alert("line 19="+object.id);
	var results = document.getElementById("results_1");
	
	if(keywords != "")
	{
		var terms = get_data_1(); // sort? -- data should be alphabetical for best results

		var ul = document.createElement("ul");
		var li;
		var a;
		
		if ((key.keyCode == '40' || key.keyCode == '38' || key.keyCode == '13'))
		{
			navigate_1(key.keyCode,object);
		}
		else
		{
			var kIndex = -1;
		
			for(var i = 0; i < terms.length; i++)
			{	
			
				kIndex = terms[i].activity.toLowerCase().indexOf(keywords.toLowerCase());
//设置关键字高亮显示				
//				if(kIndex >= 0) 
//				{
					li = document.createElement("li");
					
					// setup the link to populate_1 the search box
					a = document.createElement("a");
					a.href = "javascript://"; 
					document.getElementById("h_ulcnname").value=terms[i].val3;
					a.setAttribute("rel",terms[i].val);
					a.setAttribute("rev", getRank(terms[i].activity.toLowerCase(), keywords.toLowerCase()));
					a.setAttribute("ref",terms[i].val2);
					
					if(!document.all) a.setAttribute("onclick","populate_1(this,object);");
					else a.onclick = function() { populate_1(this,object); }
					
					
					
					a.appendChild(document.createTextNode(""));
					
					if(keywords.length == 1) 
					{
						var kws = terms[i].activity.toLowerCase().split(" ");
						//alert("line 68="+kws+terms[i].val2);

						var firstWord = 0;
						
						for(var j = 0; j < kws.length; j++)
						{
						 //	if(kws[j].toLowerCase().charAt(0) == keywords.toLowerCase()) {
								
								ul.appendChild(li);
								
								if(j != 0) {
									kIndex = terms[i].activity.toLowerCase().indexOf(" " + keywords.toLowerCase());
									kIndex++;
								}
								
								break;
						//	}
						}
					}
					else if(keywords.length > 1) {
						ul.appendChild(li);
					}
					else continue;

//设置关键字高亮显示					
//					var before = terms[i].activity.substring(0,kIndex);
//					var after = terms[i].activity.substring(keywords.length + kIndex, terms[i].activity.length);
//					
	
//					a.innerHTML = before + "<strong>" + keywords.toLowerCase() + "</strong>" + after;

	                a.innerHTML = terms[i].activity;
	                
					li.appendChild(a);

//				}
			}		
			
			if(results.hasChildNodes()) results.removeChild(results.firstChild);
			
			// position the list of suggest_1ions
			var s = document.getElementById(object.id);
			var xy = findPos_1(s);
	
			results.style.left = xy[0] + "px";
			results.style.top = xy[1] + s.offsetHeight + "px";
			results.style.width = s.offsetWidth + "px";
			
			// if there are some results, show them
			if(ul.hasChildNodes()) {
				results.appendChild(filterResults(ul));
				
				if(results.firstChild.childNodes.length == 1) results.firstChild.firstChild.getElementsByTagName("a")[0].className = "hover";
				
			}

		}
	}
	else
	{
		if(results.hasChildNodes()) results.removeChild(results.firstChild);
	}
}

/***********************************************
 * Rank results - used for sorting result sets
 * 0 if entire row starts with kw
 * 0 < i < 1 if any word in row starts with kw (1k char max)
 * i > 1 if row contains kw anywhere else
 ***********************************************/
function getRank(activity, keywords)
{
	var ret = -1;
	var kIndex = activity.indexOf(keywords);
	
	ret = (activity.charAt(kIndex - 1) == " ") ? kIndex : (200*kIndex);
	
	return ret;	
}

/***********************************************
 * Sort the result suggest_1ion sets
 ***********************************************/
function filterResults_1(s)
{
	var sorted = new Array();
	
	for(var i = 0; i < s.childNodes.length; i++)
	{
		sorted.push(s.childNodes[i]);
	}
	
	var ul = document.createElement("ul");
	var lis = sorted.sort(sortIndex);
	
	for(var j = 0; j < lis.length; j++)
	{
		if(j < maxResults) ul.appendChild(lis[j]);
		else break;
	}

	return ul;
	
}

function sortIndex_1(a,b)
{
	// wow thats ugly -- need logic around grouped items getting out of order
	return (a.getElementsByTagName("a")[0].rev - b.getElementsByTagName("a")[0].rev);
}


/***********************************************
 * Navigate_1 using up/down and submit with 'Enter'
 ***********************************************/
function navigate_1(key,object)
{
	var results = document.getElementById("results_1");
	var keyIndex = document.getElementById("keyIndex_1");
	
	var i = keyIndex.value;
	
	if(i == "" || !i) i = -1;
	else i = parseFloat(i);

	var ul = results.childNodes[0];

	if(ul)
	{
		if(key == '40') // DOWN
		{
			i++;
			if(i > ul.childNodes.length-1) i = ul.childNodes.length-1;
			
			keyIndex.value = i;
			
			try {
				ul.childNodes[i].getElementsByTagName("a")[0].className = "hover";
				ul.childNodes[i-1].getElementsByTagName("a")[0].className = "";
			}
			catch(e) {}
		}
		else if(key == '38') // UP
		{
			i--;
			if(i <= 0) i = 0;
			
			keyIndex.value = i;
			
			try {
				ul.childNodes[i].getElementsByTagName("a")[0].className = "hover";
				ul.childNodes[i+1].getElementsByTagName("a")[0].className = "";
			}
			catch(e) {}
		}
		else if(key == '13' || key == '9') // ENTER/TAB -- POPULATE_1
		{
			if(i == -1) i = 0;
			populate_1(ul.childNodes[i].getElementsByTagName("a")[0],object);
		}
		else return;	
	}
}

/***********************************************
 * Allow for using tab onkeydown
 ***********************************************/
function tabfix_1(keywords, key,object)
{
	if(key.keyCode == '9') {
		navigate_1(key.keyCode,object);
		return false;
	}
	else return true;
}

/***********************************************
 * Populate_1 hidden fields via onclick on 'Enter'
 ***********************************************/
function populate_1(a,object)
{
	
	var ul = document.getElementById("results_1").childNodes[0];
	
	try {
		var pick = a.innerHTML.replace("<strong>","").replace("</strong>","");
		//alert("line 251="+a);
		//alert(a.getAttribute("ref"));
		// IE6 converts HTML elements to uppercase -- could be done with RegExp
		if(document.all) pick = a.innerHTML.replace("<STRONG>","").replace("</STRONG>","");
		
		//document.getElementById("s").value = pick;
		//document.getElementById(object.id).value = pick;
		document.getElementById(object.id).value = a.getAttribute("ref");
	}
	catch(e) {}
	
	clearSuggest_1();
}

/***********************************************
 * Find an elements position on the screen
 ***********************************************/
function findPos_1(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

/***********************************************
 * Helper to preserve onclick on suggest_1ions
 ***********************************************/
function clearSuggest_1()
{
	// need a timeout so the onclick event is captured before results are hidden
	setTimeout("hideSuggest_1()",200);  //time set选择时间设置
}

/***********************************************
 * Hide the suggest_1ions list and remove from DOM
 ***********************************************/
function hideSuggest_1()
{
	var results = document.getElementById("results_1");
	if(results.hasChildNodes()) results.removeChild(results.firstChild);
	
	document.getElementById("keyIndex_1").value = "-1"; // reset the suggest_1ions index
}

