// Food Network Auto-Suggest Script
var aryList = new Array();
var cookieReturn="no";
var mFileExtension = ".js";
var domainName = "http://" + window.location.hostname;
var mFilePath = domainName + "/search/food/static/autocomplete/recipes/";
//var mFilePath = "http://localhost/Food/food/recipe/chicken+soup+something+more/live/xml/";
var mShadows = null;

function loadXML(url, str) {
	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null) {
		//alert ("Your browser does not support AJAX!");
		return;
	} 	
	xmlHttp.onreadystatechange = function() {stateChanged(str);}
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function GetXmlHttpObject() {
	var xmlHttp = null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function stateChanged(str) { 
	var eachWord = ""; 
	if (xmlHttp.readyState==4) {      
		if (xmlHttp.status == 200) { 
			theResult = xmlHttp.responseText.split(","); 
			num=0; 
			for (var i=0; i<theResult.length;  i++) { 
				aryList[i] = theResult[i]; 
			}
			displaySuggestions(str); 
		} else {
			return false;
		}
	}
}

function setSearchCookie() {
	var c_name = "storedSearchTerm";
	var value = document.HeaderSearchForm.searchString.value;
	document.cookie = escape(c_name) + "=" + escape(value) + "; path=/; domain=.foodnetwork.com";
}

function getSearchCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=")
		if (c_start != -1) { 
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";",c_start)
			if (c_end == -1) c_end = document.cookie.length
				return unescape(document.cookie.substring(c_start, c_end))
		} 
	}
	return "";
}

function checkSearchCookie() {
	searchTerm = getSearchCookie('storedSearchTerm')
	if (searchTerm != null && searchTerm != "") {		
		document.HeaderSearchForm.searchString.value = searchTerm;
		var firstThreeChars = searchTerm.charAt(0) + searchTerm.charAt(1) + searchTerm.charAt(2);
		cookieReturn="yes";
		var mFileName = firstThreeChars;
		if (mFileName.indexOf(" ") > -1) {mFileName = mFileName.replace(/ /,"_20");}
		aryList = new Array();
		loadXML(mFilePath + mFileName + mFileExtension, firstThreeChars); // reload XML
	} 
}

function selectSuggest (which) {	
	try {
		document.body.removeChild(oSuggestContainerDivContainer);
		mShadows.removeShadows();
	} catch(e) {
	}
	document.getElementById("the_iframe").style.display = "none";
	document.HeaderSearchForm.searchString.value = which;
	document.HeaderSearchForm.searchString.focus(); 
}

function showHint(str, e) {
	str = str.toLowerCase();
	cookieReturn="no";	
	var KeyID = document.all?window.event.keyCode:e.keyCode;
	if (str.length < 3) {
		document.getElementById("suggest_box").style.display = "none";
		document.getElementById("the_iframe").style.display = "none";
		try {
			document.getElementById("txtHint").innerHTML = "";
			mShadows.removeShadows();
			document.body.removeChild(oSuggestContainerDivContainer);
		} catch(e) {
		}
		// unload XML file (load blank)? ole after searching for ham yield results since no ole file
		childNum = -1;
		suggestionPhraseIsHighlighted = -1;
		loaded= "no";
		return;
	}
	if (KeyID == 38 || KeyID == 40) return;
	if (str.length == 3) {
			// deal with spaces
		var mFileName = str;
		if (mFileName.indexOf(" ") > -1) {mFileName = mFileName.replace(/ /,"%20");}		
		aryList= new Array();
		loadXML(mFilePath + escape(mFileName) + mFileExtension, str);
	}
	if (str.length >= 3) displaySuggestions(str);
}

function displaySuggestions(str) {
	if (cookieReturn == "yes") return;

	// get the width of the search textbox
	var searchTextWidth = document.forms["HeaderSearchForm"].elements["searchString"].offsetWidth;

	str = str.toLowerCase();
	str = str.replace(/[^a-z0-9\s.]*/g, "");
	str = str.replace(/  /g, " ");
	document.getElementById("suggest_box").style.display = "block";
	document.getElementById("the_iframe").style.display = "block";
	document.getElementById("suggest_box").style.width = searchTextWidth - 2 + "px";
	document.getElementById("the_iframe").style.width = searchTextWidth - 2 + "px";
	var outp = new Array();	
	// loop through array
	for (var i=0; i<aryList.length; i++) {
		if (aryList[i].indexOf(str) != -1) {
			if (outp.length < 10) {
				outp.push(aryList[i]);
			}
		}
	}
	document.getElementById("txtHint").innerHTML = "";
	document.getElementById("suggest_box").style.zIndex = 1000;
	var finalPhrase = ""; 
 	var mWord = ""; 
	var mSuggestionPhraseClassName = "phraseClass";
	childNum = -1;
	suggestionPhraseIsHighlighted = -1;
	var mWholeWord = "";
	if (oSuggestContainerDiv) document.body.removeChild(oSuggestContainerDivContainer);
	if (outp.length == 0) {
		document.getElementById("suggest_box").style.display = "none";
		document.getElementById("the_iframe").style.display = "none";
		try {
			mShadows.removeShadows();
		} catch(e) {
		}
		return;
	} else {
		var oSuggestContainerDivContainer = document.createElement("div");
		oSuggestContainerDivContainer.id = "oSuggestContainerDivContainer";
		oSuggestContainerDivContainer.style.width = searchTextWidth + "px";
		oSuggestContainerDivContainer.style.margin = "0px";
		oSuggestContainerDivContainer.style.padding = "0px";
		document.getElementById("txtHint").appendChild(oSuggestContainerDivContainer);
		var oSuggestContainerDivSuggestionText = document.createElement("span");
		oSuggestContainerDivSuggestionText.id = "sug";
		oSuggestContainerDivSuggestionText.style.display = "block";
		oSuggestContainerDivSuggestionText.style.fontSize = "11px";
		oSuggestContainerDivSuggestionText.style.lineHeight = "11px";
		oSuggestContainerDivSuggestionText.style.marginRight = "3px";
		oSuggestContainerDivSuggestionText.style.marginTop = "3px";
		oSuggestContainerDivSuggestionText.innerHTML = "Suggestions";
		oSuggestContainerDivContainer.appendChild(oSuggestContainerDivSuggestionText);
		for (var i=0; i<outp.length; i++) {  
			mWord = outp[i];
			mWholeWord = mWord;
			// truncate the phrase if greater than X
			var hellipPhrase = "";
			var truncateAmount = 27;
			if (mWord.length > truncateAmount) {
				mWord = mWord.substring(0, truncateAmount);
				hellipPhrase = "&hellip;";
			}
			var mStrPos = mWord.indexOf(str);
			var mStrLength = str.length;
			var oSuggestContainerDiv = document.createElement("div");
			oSuggestContainerDiv.id = "oSuggestContainerDiv" + i;
			oSuggestContainerDiv.className = mSuggestionPhraseClassName;
			oSuggestContainerDiv.childNum = i;
			if (!document.all) oSuggestContainerDiv.style.width = (searchTextWidth - 15) + "px";
			oSuggestContainerDiv.mWord = mWord;
			oSuggestContainerDiv.mWholeWord = mWholeWord;
			
			oSuggestContainerDiv.onmouseover = function() {
				document.forms["HeaderSearchForm"].elements["searchString"].focus();
				highlightSuggestPhrase(this, true, this.childNum);
			}
			oSuggestContainerDiv.onmouseout = function() {
				//highlightSuggestPhrase(this, false, this.childNum);
			}
			oSuggestContainerDiv.onclick = function() {
				fromChildrenClick = true;
				selectSuggest(this.mWholeWord);
				document.forms["HeaderSearchForm"].elements["searchString"].value = this.mWholeWord;
				var searchString = document.forms["HeaderSearchForm"].elements["searchString"];
				searchString.value = searchString.value.replace(/[^a-zA-Z 0-9"']+/g,'');
				searchString.value = searchString.value.replace(/['']+/g,'\'');
				setSearchCookie();
				if (document.HeaderSearchForm.searchType[0].checked == true) dorewriteurl();
				document.forms["HeaderSearchForm"].submit();
			}
			if (mWord.indexOf(str) != -1) {
				var mStrLeft = mWord.substring(0, mStrPos);
				var mStrMiddle = mWord.substring(mStrPos, mStrPos + mStrLength);
				var mStrRight = mWord.substring(mStrPos + mStrLength, mWord.length);
				oSuggestContainerDiv.innerHTML = mStrLeft + "<span class='specialClass'>" + mStrMiddle + "</span>" + mStrRight + hellipPhrase;
			} else {
				oSuggestContainerDiv.innerHTML = mWord + hellipPhrase;
			}
			oSuggestContainerDivContainer.appendChild(oSuggestContainerDiv);
		}
	}
	document.getElementById("the_iframe").style.height = document.getElementById("txtHint").offsetHeight + 2;
	childsLength = document.getElementById("oSuggestContainerDivContainer").getElementsByTagName("div").length;
	try {
		mShadows.removeShadows();
	} catch(e) {
	}
	mShadows = new CDEShadow("suggest_box", "black", 1, 45, 3, 15, 0);
	
}

var childsLength = 0;
var childNum = -1;
var suggestionPhraseIsHighlighted = -1;

function highlightSuggestPhrase(pElement, pIsHighlight, pChildNum) {
	var allChildren = document.getElementById("oSuggestContainerDivContainer").getElementsByTagName("div");
	var mSuggestionPhraseClassName = "phraseClass";
	if (allChildren.length > 0) {
		for (var i=0; i<allChildren.length; i++) {
			allChildren[i].className = "phraseClass";
		}
		if (pIsHighlight) {
			mSuggestionPhraseClassName = "phraseHoverClass";
			pElement.style.paddingLeft = "6px";
			pElement.style.paddingRight = "6px";
		} else {
			mSuggestionPhraseClassName = "phraseClass";
			childNum = -1;
			suggestionPhraseIsHighlighted = -1;
		}
		pElement.className = mSuggestionPhraseClassName;
		suggestionPhraseIsHighlighted = pChildNum;
	}
}

function keyHandler(e) {
	var KeyID = document.all?window.event.keyCode:e.keyCode;
	if ( document.getElementById("oSuggestContainerDivContainer")) {
		switch (KeyID) {
			case 38: 
				var allChildren = document.getElementById("oSuggestContainerDivContainer").getElementsByTagName("div");
				if (childNum >= allChildren.length) childNum = -1;
				if (allChildren.length > 0) {
					for (var i=0; i<allChildren.length; i++) {
						allChildren[i].className = "phraseClass";
					}
					if (suggestionPhraseIsHighlighted != -1) childNum = suggestionPhraseIsHighlighted;
					childNum = childNum - 1;
					if (childNum < 0) childNum = childsLength - 1;
					allChildren[childNum].className = "phraseHoverClass";
					allChildren[childNum].style.paddingLeft = "6px";
					allChildren[childNum].style.paddingRight = "6px";
					document.forms["HeaderSearchForm"].elements["searchString"].value = allChildren[childNum].mWholeWord;
					suggestionPhraseIsHighlighted = childNum;
				}
				break;	
			case 40: 
				var allChildren = document.getElementById("oSuggestContainerDivContainer").getElementsByTagName("div");
				if (childNum >= allChildren.length) childNum = -1;
				if (allChildren.length > 0) {
					for (var i=0; i<allChildren.length; i++) {
						allChildren[i].className = "phraseClass";
					}
					if (suggestionPhraseIsHighlighted != -1) childNum = suggestionPhraseIsHighlighted;
					childNum = childNum + 1;
					if (childNum >= childsLength) childNum = 0;
					allChildren[childNum].className = "phraseHoverClass";
					allChildren[childNum].style.paddingLeft = "6px";
					allChildren[childNum].style.paddingRight = "6px";
					document.forms["HeaderSearchForm"].elements["searchString"].value = allChildren[childNum].mWholeWord;
					if (childNum == (childsLength - 1)) childNum = -1;
					suggestionPhraseIsHighlighted = childNum;
				}
				break;
			case 27:
				closeSuggestBox2();
				break;
		}
	}
}

function closeSuggestBox() {setTimeout('closeSuggestBox2()', 200);}

function closeSuggestBox2() {
	try {
		document.getElementById("suggest_box").style.display = "none";
		document.getElementById("the_iframe").style.display = "none";
		document.getElementById("txtHint").innerHTML = "";
		mShadows.removeShadows();
		document.body.removeChild(oSuggestContainerDivContainer);
	} catch(e) {}
	childNum = -1;
	suggestionPhraseIsHighlighted = -1;
}