/*
 USE [ onfocus="showResult(event, this)" autocomplete="off" ] WITHIN INPUT TAG
 */

function focusSearch() {
    if (document.getElementById("KeywordSearch") !== null) {
        var totalInputs = document.getElementsByTagName('input');
        for (n = 1; n < totalInputs.length; n++) {
            if (totalInputs[n].type == "text" && totalInputs[n].name != "searchText") {
                return;
            }
        }

        if (document.getElementById("searchText") !== null) document.getElementById("searchText").focus();	
    }
}


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], 10);
			            targetY = parseInt(aPosition[1], 10) + ref.clientHeight + 1;

			            suggestDiv.id = "suggestDiv";
			            suggestDiv.style.left = targetX;
			            suggestDiv.style.top = targetY;
			            suggestDiv.style.width = ref.clientWidth + 4;

			            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");
			        }
			    }
			}; //onreadystatechange function
			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';
	}
}

