/*
  $Id: suggest.js,v 1.1 2010/08/17 18:01:46 eric Exp $

  Pro-Active Software
  http://www.pro-activesoftware.com
*/

var searchReq = null;
var arrowIdx = null;
var query = null;

if (window.XMLHttpRequest)
	searchReq = new XMLHttpRequest();
else if (window.ActiveXObject)
	searchReq = new ActiveXObject("Microsoft.XMLHTTP");

function searchSuggest(e) {
	if (!searchReq) return;
	if (!e) var e = window.event;
	var code = (e.keyCode) ? e.keyCode : e.which;
	var list = document.getElementById('suggest').childNodes;
	switch (code) {
		case 40: // arrow down
			if (list.length > 0) {
				if (list[arrowIdx])
					focusSuggest(list[arrowIdx], false);
				if (arrowIdx == null || arrowIdx >= list.length - 1)
					arrowIdx = 0;
				else
					arrowIdx++;
				if (list[arrowIdx]) {
					if (!query)
						query = document.getElementById('keywords').value;
					focusSuggest(list[arrowIdx], true);
					document.getElementById('keywords').value = list[arrowIdx].textContent || list[arrowIdx].innerText;
					document.forms['quick_find'].onsubmit = returnFalse;
				}
			}
			break;
		case 38: // arrow up
			if (list.length > 0) {
				if (list[arrowIdx])
					focusSuggest(list[arrowIdx], false);
				if (arrowIdx == null || arrowIdx <= 0)
					arrowIdx = list.length - 1;
				else
					arrowIdx--;
				if (list[arrowIdx]) {
					if (!query)
						query = document.getElementById('keywords').value;
					focusSuggest(list[arrowIdx], true);
					document.getElementById('keywords').value = list[arrowIdx].textContent || list[arrowIdx].innerText;
					document.forms['quick_find'].onsubmit = returnFalse;
				}
			}
			break;
		case 27: // escape
			if (query)
				document.getElementById('keywords').value = query;
			clearSearchSuggest();
			break;
		case 13: // enter
			if (arrowIdx != null)
				document.getElementById('suggest').childNodes[arrowIdx].onmousedown();
			break;
		default:
			arrowIdx = null;
			document.forms['quick_find'].onsubmit = null;
			var str = document.getElementById('keywords').value;
			if (str) {
				searchReq.onreadystatechange = function() {
					if (searchReq.readyState == 4 && searchReq.status == 200)
						handleSearchSuggest(str);
				}
				searchReq.open('GET', 'search_suggest.php?q=' + escape(str), true);
				searchReq.send(null);
			} else {
				clearSearchSuggest();
			}
			break;
	}
}

function handleSearchSuggest(terms) {
	var ss = document.getElementById('suggest');
	ss.innerHTML = '';
	ss.style.visibility = 'visible';
	var lines = searchReq.responseText.split("\n");
	var str = null;
	var pos = null;
	for (i = 0; i < lines.length; i++) {
		if (lines[i]) {
			str = lines[i].split("~");
			pos = str[1].toLowerCase().indexOf(terms.toLowerCase());
			if (pos > -1)
				str[1] = str[1].substr(0, pos) + '<b>' + str[1].substr(pos, terms.length) + '</b>' + str[1].substr(pos + terms.length, str[1].length);
			ss.innerHTML += '<div onmousedown="goSuggest(' + str[0] + ');" onmouseover="focusSuggest(this, true, true);">' + str[1] + '</div>';
		}
	}
}

function clearSearchSuggest() {
	arrowIdx = null;
	query = null;
	var ss = document.getElementById('suggest');
	ss.innerHTML = '';
	ss.style.visibility = 'hidden';
	document.forms['quick_find'].onsubmit = null;
}

function goSuggest(products_id) {
	window.location = 'product_info.php?products_id=' + products_id + '&redirect=1';
}

function focusSuggest(element, focus, findIdx) {
	if (findIdx) {
		var list = document.getElementById('suggest').childNodes;
		for (i = 0; i < list.length; i++) {
			if (list[i] == element) {
				if (list[arrowIdx])
					focusSuggest(list[arrowIdx], false);
				arrowIdx = i;
				break;
			}
		}
	}
	if (focus)
		element.style.backgroundColor = '#B3D4FF';
	else
		element.style.backgroundColor = '#FFFFFF';
}

function returnFalse() {
	return false;
}
