<PUBLIC:property name="textfield" />
<PUBLIC:property name="popup" />
<PUBLIC:attach event="ondocumentready" handler="setUpComboBox" />
<SCRIPT language="JScript">
function setUpComboBox() {
	if (null == popup) {
		popup = element.children(0);
		element.appendChild(popup);
		popup.style.background = "#E3EFF6";
		var prop;
		for (prop in element) {
			var val = element.getAttribute(prop,3);
			if (val != null && val != "" && prop != "name" && prop != "size") {
				popup.setAttribute(prop,val);
			}
		}
		popup.id = element.name + "_popup";
		popup.attachEvent("onchange", takeValueFromPopup);
		popup.attachEvent("onfocus", popupfocus);
		popup.attachEvent("onblur", popupblur);
	}
	if (null == textfield) {
			textfield = document.createElement("INPUT");
			textfield.id = element.name + '_text';
			textfield.name = element.name;
			textfield.associatedPopup = popup;
			textfield.dir='rtl';
			textfield.className="input_style"
			popup.textfield = textfield;
			if (element.size != null && element.size > 0 && popup.currentStyle.width == "auto") {
				textfield.size=element.size;
			} 
			else {
				textfield.style.posWidth=element.clientWidth-16;
			}
			textfield.attachEvent("onchange",takeValueFromTextfield);
			textfield.attachEvent("onkeyup",completeTyping);
			textfield.attachEvent("onkeydown",txtkeydown);
			element.parentElement.insertBefore(textfield, element);
			textfield.style.marginRight='1px';
			takeValueFromPopupAt(popup);
		}
	popup.style.position="absolute";
	popup.tabIndex=-1;

	popup.style.setExpression("posWidth", "textfield.clientWidth+20", "JScript");
	popup.style.left = '1px';
	popup.findLeftOffset=findLeftOffset;
	popup.style.setExpression("posLeft", "findLeftOffset(textfield)-16", "JScript");
	popup.style.top = '1px';
	popup.findTopOffset=findTopOffset;
	popup.style.setExpression("posTop", "findTopOffset(textfield)", "JScript");
	popup.style.setExpression("posHeight", "textfield.clientHeight", "JScript");
	popup.style.setExpression("clip","'rect(auto auto auto '+(textfield.clientWidth+2)+')'", "JScript");
	popup.style.setExpression("clip","'rect(auto auto auto '+(textfield.clientWidth+2)+')'", "JScript");
	popup.style.setExpression("clip","'rect(auto 16 auto auto)'", "JScript");
	popup.needsblur=false;
}

function takeValueFromPopup() {
	takeValueFromPopupAt(event.srcElement);
}

function takeValueFromPopupAt(popup) {
	var idx=popup.selectedIndex;
	var textfield=popup.textfield;
	if (idx != null && idx >= 0) {
		textfield.value = popup.options[idx].text;
	}
	if (popup.needsblur) {
		textfield.focus();
		textfield.select();
	}
}

function takeValueFromTextfield() {
	var txt = event.srcElement;
	var popup = txt.associatedPopup;
	var idx;
	for(idx=0;idx<popup.options.length;idx++) {
		if (popup.options[idx].text == txt.value) {
			popup.selectedIndex=idx;
			return;
		}
	}
	popup.selectedIndex=-1;
}

function popupblur() {
	var popup = event.srcElement;
	popup.needsblur=false;
}

function popupfocus() {
	var popup = event.srcElement;
	popup.needsblur=true;
}

function txtkeydown() {
	if (event.keyCode == 13) {
		takeValueFromTextfield();
		//checkFields(element.name);
		return false;
	}
	if (event.keyCode == 40) {
		if (popup.selectedIndex < popup.options.length-1)
			popup.selectedIndex += 1;
		takeValueFromPopupAt(popup);
	}
	if (event.keyCode == 38) {
		if (popup.selectedIndex > 0)
			popup.selectedIndex -= 1;
		else if (popup.selectedIndex == -1)
			popup.selectedIndex = popup.options.length-1;
		takeValueFromPopupAt(popup);
	}
}

function completeTyping() {
	if (event.keyCode < 0x2f && event.keyCode != 32)
		return;
	var text = event.srcElement.value;
	var popup = event.srcElement.associatedPopup;
	var options = popup.options;
	var i;
	var utext = text.toUpperCase();
	for(i=0;i<options.length;i++) {
		var newtxt = options[i].text;
		var uopt = newtxt.toUpperCase();
		if (uopt != utext && 0 == uopt.indexOf(utext)) {
			var txtrange = event.srcElement.createTextRange();
			event.srcElement.value = text + newtxt.substr(text.length);
			txtrange.moveStart("character", text.length);
			txtrange.select();
			takeValueFromTextfield();
			break;
		}
	}
}

function findLeftOffset(elem) {
	var left = 0;
	while (elem.tagName != "BODY") {
		left += elem.offsetLeft;
		elem = elem.offsetParent;
	}
	return left;
}

function findTopOffset(elem) {
	var top = 0;
	while (elem.tagName != "BODY") {
		top += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return top;
}
</SCRIPT>
</PUBLIC:COMPONENT>
