// Alternatieve selectbox
function form_select_init() {
	// Initialisatie
	var listItems = document.getElementsByTagName("ul");
	var listItem, i, listOption, activeOption = 0;
	for(i = 0; i < listItems.length; i++) {
		listItem = listItems[i];
		if(listItem.className == "form_input") {
			listItem.parentNode.style.zIndex = 100;
			listItem.className += " form_select";
			var listOptions = listItem.getElementsByTagName("li");
			for(j = 0; j < listOptions.length; j++) {
				listOption = listOptions[j];
				listOption.onclick = new Function("form_select_pick(this.parentNode, " + j + ");");
				if(listOption.getElementsByTagName("input")[0].checked) {	
					activeOption = j;							
				}
				listOption.getElementsByTagName("a")[0].onclick = function() {return false;};
			}
			form_select_expand(listItem, activeOption);
			form_select_pick(listItem, activeOption);
		}
	}
}

function form_select_expand(listItem, activeOption, collapse) {
	if(listItem.className == "form_input form_select form_select_expand" || collapse) {
		if(listItem.parentNode.style.zIndex >= 200) {
			listItem.parentNode.style.zIndex = parseInt(listItem.parentNode.style.zIndex) - 100;
		}
		listItem.className = "form_input form_select";
		listItem.style.top = "0px";
		return false;
	} else {
		if(listItem.parentNode.style.zIndex <= 200) {
			listItem.parentNode.style.zIndex = parseInt(listItem.parentNode.style.zIndex) + 100;
		}
		listItem.className = "form_input form_select form_select_expand";
		listItem.style.top = -parseInt(activeOption * 21) - 1 + "px";
		return true;
	}
}


function form_select_pick(listItem, activeOption) {
	if(form_select_expand(listItem, activeOption)) {
		return false;
	}
	var listOptions = listItem.getElementsByTagName("li");
	var listOption;
	for(i = 0; i < listOptions.length; i++) {
		listOption = listOptions[i];
		if(i == activeOption) {
			listOption.className = "active";
			listOption.getElementsByTagName("input")[0].checked = true;
		} else {		
			listOption.className = "inactive";
		}
	}		
	form_select_expand(listItem, activeOption, true);
}


// AJAX autocomplete
function createRequestObject() {
	var ro;
	if(window.XMLHttpRequest) {
		ro = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		try {
			ro = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				ro = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				return false;
			}
		}
	}
	return ro;
}

function getNodeValue(obj, tag) {
	if(obj.getElementsByTagName(tag).length > 0 && obj.getElementsByTagName(tag)[0].firstChild) {
		return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;
	} else {
		return "";
	}
}

function getNodeAttribute(obj, tag, att) {
	if(obj.getElementsByTagName(tag).length > 0) {
		return obj.getElementsByTagName(tag)[0].getAttribute(att);
	} else {
		return "";
	}
}

var objHTTP;
function autoComplete(frmInput, acDepend) {
	var keycode = event.keyCode;

	objHTTP = createRequestObject()
	if(!objHTTP || frmInput.value.length < 1) {
		return false;	
	}

	frmValue = frmInput.value;
	groupBy = frmInput.name;

	
	var isChar = !(keycode < 32 || (keycode >= 33 && keycode <= 46) || (keycode >= 112 && keycode <= 123));
	if(isChar) {
		if(keycode == 8) {
			frmValue = frmValue.substring(0, frmValue.length - 1);
		}
		if(frmValue.length > 0) {
			var parameters = "q=" + escape(frmValue) + "&element=" + escape(frmInput.id) + "&groupBy=" + groupBy;
			if(acDepend != "" && document.getElementById(acDepend)) {
				parameters += "&dependName=" + escape(acDepend)
				parameters += "&dependValue=" + escape(document.getElementById(acDepend).value)
			}
			
			objHTTP.onreadystatechange = autoComplete_Process;
			objHTTP.open("POST", "autoComplete.php", true);
			objHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			objHTTP.setRequestHeader("Content-length", parameters.length);
			objHTTP.setRequestHeader("Connection", "close");
			objHTTP.send(parameters);
		}
	}
}


function autoComplete_Process() {
	if(objHTTP.readyState == 4) {
		//return alert( objHTTP.responseText );		
		response = objHTTP.responseXML.getElementsByTagName("autocomplete")[0];
		var query = getNodeValue(response, "query");
		var element = getNodeAttribute(response, "query", "element");
		var element = document.getElementById(element);

		var results = response.getElementsByTagName("results")[0];
		var resultsNum = results.childNodes.length;


		if(resultsNum > 0) {
			var value = results.childNodes[0].getAttribute("value");
				var oRange = element.createTextRange();
				element.value = value;
				oRange.moveStart("character", query.length);
				oRange.moveEnd("character", 0);	
				oRange.select();
		}
	}
}

function selectRange(oTextbox, iStart, iLength) {
	if (oTextbox.createTextRange) {
		var oRange = oTextbox.createTextRange(); 
		oRange.moveStart("character", iStart); 
		oRange.moveEnd("character", iLength - oTextbox.value.length); 
		oRange.select();
	} else if (oTextbox.setSelectionRange) {
		oTextbox.setSelectionRange(iStart, iLength);
	}
}

