﻿function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function insertAfter(newElement, targetElement) {
	var parent = targetElement.parentNode;
	if (parent.lastChild == targetElement) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement, targetElement.nextSibling);
	}
}

function createRequest() {
	var request = null;

	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (tryothermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = null;
			}
		}
	}
	if(request == null) {
		alert("Error!");
	} else {
		
		return request;
	}
}


/**********************************************************************/

function doSearch(keyword) {
	var url = "/keywords.php?keyword=" + encodeURIComponent(keyword);
	searchRequest = createRequest();
	searchRequest.open('GET',url,true);
	searchRequest.onreadystatechange = getResults;
	searchRequest.send(null);
}

function getResults() {
	if(searchRequest.readyState == 4) {
		if(searchRequest.status == 200) {
			var results = eval('(' + searchRequest.responseText + ')');
			if(results.length>0) {
				var resultList = document.createElement('ul');
				resultList.setAttribute('id','resultBox');
				var searchBox = document.getElementById("searchForm").firstChild.firstChild;
				resultList.setAttribute('id','resultBox');
				for(i=0;i<results.length;i++) {
					var currentLi = document.createElement('li');
					var currentLink = document.createElement('a');
					var liText = document.createTextNode(results[i]);
					currentLink.appendChild(liText);
					currentLink.setAttribute('href','');
					currentLink.onclick = function() {
						searchBox.value = this.firstChild.nodeValue;
						clearResults();
						return false;
					}
					currentLi.appendChild(currentLink);
					resultList.appendChild(currentLi);
				}
				searchBox.parentNode.appendChild(resultList);
			}
		} else {
			alert("Request status is: "+searchRequest.status);
		}
	}
}

function clearResults() {
	if(document.getElementById('resultBox')) {
		var resultBox = document.getElementById('resultBox');
		resultBox.parentNode.removeChild(resultBox);
	}
}

function initSearchBox() {
	if(!document.getElementById) {return false};
	if(!document.getElementsByTagName) {return false};
	
	var searchBox = document.getElementById("searchForm").firstChild.firstChild;
	searchBox.setAttribute("autocomplete","off");
	
	searchBox.onkeyup = function() {
		if(searchBox.value.length>1) {
			doSearch(searchBox.value);
		}
		clearResults();
	}

	searchBox.onfocus = function() {
		if(searchBox.value.length>1) {
			doSearch(searchBox.value);
		}
		clearResults();
	}
	
	searchBox.onblur = function() {
		setTimeout('clearResults()', 300);
	}
}

addLoadEvent(initSearchBox);

