/*
 USE [ onfocus="showResult(event, this)" autocomplete="off" ] WITHIN INPUT TAG
 */
 
 var setup;
var hold = false;
var toDisplay = new Array(); // store possible suggestions
var key;
var eventType; // keyup, keydown, blur, focus
var keyedItem = -1; // itemDiv reference for keyboard nav

function findPos(obj) {
	var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    	return [curleft,curtop];
    }
}

function showResult(evt, ref) {
	if (window.event) {
		evt = window.event
	}
	
	if (setup != ref.id) {
		ref.onblur = function () {
			removeDiv("suggestDiv");
		}
		ref.onkeydown = function (evt) {
			showResult(evt, this);
		}
		ref.onkeyup = function (evt) {
			showResult(evt, this);
		}
		setup = ref.id;
	}

	key = evt.keyCode;
	eventType = evt.type;
	if (eventType == 'keydown') {
		if (key == 40 || key == 38) {
			if (key == 40 && keyedItem < toDisplay.length-1) {
				keyedItem ++;
				unSelectItems(keyedItem);
				ref.value = toDisplay[keyedItem];
			}
			if (key == 38 && keyedItem > 0) {
				keyedItem --;
				unSelectItems(keyedItem);
				ref.value = toDisplay[keyedItem];
			}
		} else if (key == 9) {
			if (document.getElementById("suggestDiv")) {
				document.body.removeChild(document.getElementById("suggestDiv"));
			}
			hold = false;
		} else if (key == 13) {
			//ref.submit();
			pageTracker._trackEvent('h', 'sug');
			if (document.getElementById("suggestDiv")) {
				document.body.removeChild(document.getElementById("suggestDiv"));
			}
			hold = false;
		}
	} else if (eventType == 'focus' && hold == true) {
		return false;
	} else {
		if (key != 40 && key != 38 && key != 9) {
			toDisplay.length = 0;
			if (ref.value.length==0) { 
				if (document.getElementById("suggestDiv")) {
					removeDiv("suggestDiv");
				}
				return;
			}
			
			if (window.XMLHttpRequest) {// code for IE7+, Firefox
				xmlhttp = new XMLHttpRequest();
				if (xmlhttp.overrideMimeType) {
					xmlhttp.overrideMimeType('text/xml');
				}
			} else {// code for IE6, IE5
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			xmlhttp.async = "false";
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState==4 && xmlhttp.status==200) {
					var xml = xmlhttp.responseXML.getElementsByTagName("searchsuggestions")[0];
					for (i=0; i<xml.getElementsByTagName("suggestion").length; i++) { 
						if (xml.children) {
							toDisplay[i] = xml.children[i].children[0].firstChild.wholeText;
						} else {
							toDisplay[i] = xml.childNodes[i].childNodes[0].firstChild.nodeValue;
						}
					}
					//alert(toDisplay.length)
					if (toDisplay.length>0) {
						var suggestDiv = document.createElement("div");
						var writeHTML
						var xyPosString
						var xyPos
						var targetX
						var targetY
						var suggestText
									
						xyPos = findPos(ref)
						xyPosString = xyPos.toString();
						aPosition = xyPosString.split(",");
						
						targetX = parseInt(aPosition[0]);
						targetY = parseInt(aPosition[1])+parseInt(20);
						
						suggestDiv.id = "suggestDiv";
						suggestDiv.style.left = targetX+"px";
						suggestDiv.style.top = targetY+2+"px";
						suggestDiv.style.width = ref.clientWidth+(ref.style.borderWidth.charAt(0)*2)+2+"px";
						
						suggestDiv.onmouseover = function() {
							hold = true;
						}
						suggestDiv.onmouseout = function() {
							hold = false;
						}
						
						for (i=0; i<toDisplay.length; i++) {
							itemDiv = document.createElement('a');

							suggestText = document.createTextNode(toDisplay[i]);
							itemDiv.appendChild(suggestText);
							itemDiv.id = 'itemDiv'+i;
							suggestDiv.appendChild(itemDiv);
							itemDiv.onmouseover = function() {
								unSelectItems(this.id.slice(7,this.id.length));// roll throught other itemDivs and turn off
								keyedItem = this.id.slice(7,this.id.length);
								this.style.cursor = 'pointer';
							}
							itemDiv.onmouseout = function() {
								this.className = 'unhover';
							}
							itemDiv.onclick = function() { setTerm(ref, toDisplay[this.id.slice(7,this.id.length)]); };
						}
						
						if (document.getElementById("suggestDiv")) {
							hold = false;
							removeDiv("suggestDiv");
						}
						document.body.appendChild(suggestDiv);
					} else {
						hold = false;
						removeDiv("suggestDiv");
					}  
				}
			}
			xmlhttp.open("GET","/search-suggestions-xml.asp?SearchTerm="+ref.value,true);
			xmlhttp.send();
			xmlhttp.async = false;
			keyedItem = -1;
		}
	}
}

function removeDiv() {
	if (hold == false && document.getElementById("suggestDiv")) {
		document.body.removeChild(document.getElementById("suggestDiv"));
	}
}

function setTerm(ref, newTerm) {
	document.body.removeChild(document.getElementById("suggestDiv"));
	hold = true;
	ref.value = newTerm;
	ref.focus();
	pageTracker._trackEvent('h', 'sug');
}

function unSelectItems(showing) {
	for (u=0; u<toDisplay.length; u++) {
		document.getElementById('itemDiv'+u).className = 'unhover';
		document.getElementById('itemDiv'+u).style.cursor = 'default';
	}
	if (showing >= 0) {
		document.getElementById('itemDiv'+showing).className = 'hover';
	}
}

