www.gusucode.com > 全球营销软件站整站源码4月最新数据 4.0源码程序 > 801wyxqf\adminadmin\script\searchsug.js

    var completeKeydownSubmit = false;	/***自动完成查询列表后,键盘回车是否直接搜索,否则直接转到相关页面***/
var completeQuerySubmit = false;	/***自动完成查询点击后直接提交到搜索页面,否则直接转到相关页面***/
(function() {
	function $G(id) {return document.getElementById(id);}
	function $C(tg) {return document.createElement(tg);}
	var sugComplete = $G("sugAutoComplete"),
	oInputQuery=oQueryKeyword,
	completeData,
	createScriptObj = null,
	completeTable = null,
	completeStringIndex = -1,
	completeKeyed = false,
	mouseOnSug = false,
	completeMouse = false;
	var isIE = navigator.userAgent.indexOf("MSIE") != -1 && !window.opera;
	var isWebKit = (navigator.userAgent.indexOf("AppleWebKit/") > -1);
	var isGecko = (navigator.userAgent.indexOf("Gecko") > -1) && (navigator.userAgent.indexOf("KHTML") == -1);
	var timer3 = 0;
	function hiddenCompleteIFrame() {
		if (isIE) {
			$G("sugCompleteIFrame").style.display = "none"
		}
		sugComplete.style.display = "none";
		timer3 = 0
	}
	function createTable() {
		var completeRows = completeTable.rows;
		for (var i = 0; i < completeRows.length; i++) {
			completeRows[i].className = "trmouseout"
		}
	}
	function clickTableRow(j) {
		return function() {
			oInputQuery.blur();
			hiddenCompleteIFrame();
			clearTimeout(timer1);
			timer1 = 0;
			clearTimeout(timer2);
			timer2 = 0;
			if (!completeQuerySubmit) {
				window.location.href=completeData.a[j];
			} else {
				submitQueryResult(this.cells[0].innerHTML)
			}
		}
	}
	function submitQueryResult(v) {
		oInputQuery.value = v;
		oSearchForm.submit()
	}
	function closeCompleteIFrame() {
		hiddenCompleteIFrame();
		clearInterval(timer1);
		oInputQuery.blur();
		oInputQuery.setAttribute("autocomplete", "on");
		oInputQuery.focus();
		if (navigator.cookieEnabled && !/sugComplete=0/.test(document.cookie)) {
			document.cookie = "sugComplete=0;domain="+document.domain+";path=/";
		}
	}
	function setSug() {
		if (typeof(completeData) != "object" || typeof(completeData.s) == "undefined") {
			return
		}
		var autoCompTable= $C("table");
		with(autoCompTable) {
			id = "autoCompleteTable";
			style.width = "100%";
			style.backgroundColor = "#fff";
			cellSpacing = 0;
			cellPadding = 2;
			style.cursor = "default"
		}
		var tb = $C("tbody");
		autoCompTable.appendChild(tb);
		for (var i = 0; i < completeData.s.length; i++) {
			var tr = tb.insertRow( - 1);
			tr.onmouseover = function() {
				createTable();
				this.className = "trmouseon";
				mouseOnSug = true
			};
			tr.onmouseout = createTable;
			tr.onmousedown = function(e) {
				completeMouse = true;
				if (!isIE) {
					e.stopPropagation();
					return false
				}
			};
			tr.onclick = clickTableRow(i);
			var td = tr.insertCell( - 1);
			td.innerHTML = completeData.s[i]
		}
		var th = tb.insertRow( - 1);
		var td = th.insertCell( - 1);
		td.style.textAlign = "right";
		var oHideCompFrame = $C("A");
		oHideCompFrame.href = "javascript:void(0)";
		oHideCompFrame.innerHTML = "关闭";
		oHideCompFrame.onclick = closeCompleteIFrame;
		td.appendChild(oHideCompFrame);
		sugComplete.innerHTML = "";
		sugComplete.appendChild(autoCompTable);
		sugComplete.style.width = (isIE ? oInputQuery.offsetWidth: oInputQuery.offsetWidth - 2) + "px";
		sugComplete.style.top = (isGecko ? oInputQuery.offsetHeight - 1 : oInputQuery.offsetHeight) + "px";
		sugComplete.style.display = "block";
		if (isIE) {
			var sugCompIFrame = $G("sugCompleteIFrame");
			with(sugCompIFrame.style) {
				display = "";
				position = "absolute";
				top = oInputQuery.offsetHeight + "px";
				left = "0";
				width = sugComplete.offsetWidth + "px";
				height = autoCompTable.offsetHeight + "px"
			}
		}
		completeTable = $G("autoCompleteTable");
		completeStringIndex = -1;
		s3 = ""
	}
	function documentOnkeydown(e) {
		e = e || window.event;
		completeKeyed = false;
		var ctr;
		if (e.keyCode == 13) {
			if (isIE) {
				e.returnValue = false
			} else {
				e.preventDefault()
			}
			if (completeKeydownSubmit) {
				oSearchForm.submit();
			} else {
				if (completeStringIndex == -1){
					oSearchForm.submit();
				} else {
					window.location.href=completeData.a[completeStringIndex];
				}
			}
			return
		}
		if (e.keyCode == 38 || e.keyCode == 40) {
			mouseOnSug = false;
			if (sugComplete.style.display != "none") {
				var completeRows = completeTable.rows;
				var l = completeRows.length - 1;
				for (var i = 0; i < l; i++) {
					if (completeRows[i].className == "trmouseon") {
						completeStringIndex = i;
						break
					}
				}
				createTable();
				var ctr;
				if (e.keyCode == 38) {
					if (completeStringIndex == 0) {
						oInputQuery.value = completeData.q;
						completeStringIndex = -1;
						completeKeyed = true
					} else {
						if (completeStringIndex == -1) {
							completeStringIndex = l
						}
						ctr = completeRows[--completeStringIndex];
						ctr.className = "trmouseon";
						oInputQuery.value = ctr.cells[0].innerHTML
					}
				}
				if (e.keyCode == 40) {
					if (completeStringIndex == l - 1) {
						oInputQuery.value = completeData.q;
						completeStringIndex = -1;
						completeKeyed = true
					} else {
						ctr = completeRows[++completeStringIndex];
						ctr.className = "trmouseon";
						oInputQuery.value = ctr.cells[0].innerHTML
					}
				}
				if (!isIE) {
					e.preventDefault()
				}
			}
		}
	}
	window.newasp = {
		sug: function(data) {
			if (typeof(data) == "object" && typeof(data.s) != "undefined" && typeof(data.s[0]) != "undefined") {
				completeData = data;
				setSug()
			} else {
				hiddenCompleteIFrame();
				completeData = {}
			}
		},
		init: function() {
			s3 = oInputQuery.value;
			timer1 = setInterval(formInputQuery, 10)
		}
	};
	var s1 = "";
	var s3;
	var timer2 = 0;
	function completeRequest() {
		var completeInputQuery = true;
		var completeQueryValue = oInputQuery.value;
		if (typeof(completeTable) != "undefined" && completeTable != null) {
			var completeRows = completeTable.rows;
			for (var i = 0; i < completeRows.length; i++) {
				if (completeRows[i].className == "trmouseon") {
					if (completeQueryValue == completeRows[i].cells[0].innerHTML && !mouseOnSug) {
						completeInputQuery = false
					}
				}
			}
		}
		if (completeInputQuery && !completeKeyed) {
			if (createScriptObj) {
				document.body.removeChild(createScriptObj)
			}
			createScriptObj = $C("script");
			createScriptObj.src = "../../common/query.asp?word=" + urlencode(oInputQuery.value) + dataQueryParam + "&d=" + (new Date()).getTime();
			document.body.appendChild(createScriptObj)
		}
	}
	function urlencode(text){
		text = text.toString();
		var matches = text.match(/[\x90-\xFF]/g);
		if (matches)
		{
			for (var matchid = 0; matchid < matches.length; matchid++)
			{
				var char_code = matches[matchid].charCodeAt(0);
				text = text.replace(matches[matchid], '%u00' + (char_code & 0xFF).toString(16).toUpperCase());
			}
		}
		return escape(text).replace(/\+/g, "%2B");
	}
	function formInputQuery() {
		var s2 = oInputQuery.value;
		if (s2 == s1 && s2 != "" && s2 != s3) {
			if (timer2 == 0) {
				timer2 = setTimeout(completeRequest, 100)
			}
		} else {
			clearTimeout(timer2);
			timer2 = 0;
			s1 = s2;
			if (s2 == "") {
				hiddenCompleteIFrame()
			}
			if (s3 != oInputQuery.value) {
				s3 = ""
			}
		}
	}
	var timer1;
	oInputQuery.onkeydown = documentOnkeydown;
	var isClkSug = false;
	oInputQuery.onblur = function(e) {
		if (!isClkSug) {
			if (timer3 == 0) {
				timer3 = setTimeout(hiddenCompleteIFrame, 200)
			}
		}
		isClkSug = false
	};
	document.onmousedown = function(e) {
		e = e || window.event;
		var elm = e.target || e.srcElement;
		if (elm == oInputQuery) {
			return
		}
		while (elm = elm.parentNode) {
			if (elm == sugComplete || elm == oInputQuery) {
				isClkSug = true;
				return
			}
		}
		if (timer3 == 0) {
			timer3 = setTimeout(hiddenCompleteIFrame, 200)
		}
	};
	window.onresize = function() {
		if (typeof(timer3) != "undefined" && timer3 != 0) {
			clearTimeout(timer3)
		}
		resetSuggestion()
	};
	sugComplete.style.zIndex = 200;
	if (isIE) {
		var sugCompIFrame = $C("IFRAME");
		sugCompIFrame.src = "javascript:void(0)";
		sugCompIFrame.id = "sugCompleteIFrame";
		with(sugCompIFrame.style) {
			display = "none";
			position = "absolute"
		}
		sugComplete.parentNode.insertBefore(sugCompIFrame, sugComplete)
	}
	function resetSuggestion() {
		if (sugComplete.style.display != "none") {
			setTimeout(function() {
				hiddenCompleteIFrame();
				if (completeData != null) {
					setSug(completeData);
					oInputQuery.focus()
				}
			},
			100)
		}
	}
	document.onkeydown = function(e) {
		if (isGecko) {
			e = e || window.event;
			if (e.ctrlKey) {
				if (e.keyCode == 61 || e.keyCode == 107 || e.keyCode == 109 || e.keyCode == 96 || e.keyCode == 48) {
					resetSuggestion()
				}
			}
		}
	};
	oInputQuery.onbeforedeattivate = function() {
		if (completeMouse) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			completeMouse = false
		}
	};
	function addRule(className, rule) {
		var sheet = document.styleSheets[0];
		if (isIE) {
			sheet.addRule(className, rule)
		} else {
			var oneCssRule = className + "{" + rule + "}";
			sheet.insertRule(oneCssRule, sheet.cssRules.length)
		}
	}
	addRule("#sugAutoComplete", "border:1px solid #817F82;display:none;position:absolute;top:28px;left:0;-moz-user-select:none;");
	addRule("#sugAutoComplete td", "font:12px verdana;line-height:21px;color:#333;");
	addRule("#sugAutoComplete td a", "font:12px verdana;color:#333;");
	addRule(".trmouseon", "background-color:#316ac5;color:#fff;");
	addRule(".trmouseout", "background-color:#fff;color:#333;");
	addRule("#sugAutoComplete .trmouseon td", "color:#fff;");
	oInputQuery.onbeforedeactivate = function() {
		if (completeMouse) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			completeMouse = false
		}
	};
	oInputQuery.setAttribute("autocomplete", "off")
})();