var fieldname = ""
var ajaxfieldname = "";

/**
 *  @param _docID - document element ID string pointing to element which holds data value
 */
function autoComplete(_servletPath,_inputObject,_fieldname,_ajaxfieldname, _docID) { 
	// _inputObject is not longer need with prototype.js
	fieldname = _fieldname;
	ajaxfieldname = _ajaxfieldname;
	var ajaxsearchname = ajaxfieldname.replace("_ajax","");
	
	if (_ajaxfieldname != "") {
		if ($F(_ajaxfieldname).length > 2) { 
			var rurl= _servletPath;
			var rparam= ajaxsearchname+"=" + $F(_ajaxfieldname);
			
			// shove in extra parameter if given
			if (_docID)
			{
				rparam += "&";
				rparam += _docID;
				rparam += "=";
				rparam += $(_docID).value;
			}
			
			var myAjax = new Ajax.Request(rurl,{method: 'get',parameters:rparam ,onComplete: onAutoComplete});
			Element.show(fieldname + "_choices");
		} else {
			Element.hide(fieldname + "_choices");
		}
	} else {
		if ($F(_fieldname).length > 2) { 
			var rurl= _servletPath;
			var rparam= _fieldname+"=" + $F(_fieldname);
			
			// shove in extra parameter if given
			if (_docID != null && _docID != "")
			{
				rparam += "&";
				rparam += _docID;
				rparam += "=";
				rparam += $(_docID).value;
			}
			
			var myAjax = new Ajax.Request(rurl,{method: 'get',parameters: rparam ,onComplete: onAutoComplete});
			Element.show(fieldname + "_choices");
		} else {
			Element.hide(fieldname + "_choices");
		}
	}
	Element.update(fieldname + "_choices","<small><i>loading...</i></small>");
	
}

function selectValue(_name,_value) {
	if (ajaxfieldname != '') {
		// fieldname is the hidden one, ajax is the one to show the name in
		$(fieldname).value = _value;
		$(ajaxfieldname).value = _name;
	} else {
		// only fieldname
		$(fieldname).value = _name;
	}
	Element.hide(fieldname + "_choices");
}

function getAjaxParamValue(_node) {
	return _node.getAttribute('value');
}

function getAjaxParamName(_node) {
	return _node.firstChild.nodeValue;
}

function onAutoComplete(originalRequest)  { 
	if (originalRequest.readyState==4 || originalRequest.readyState=="complete") { 
		
		if (originalRequest.responseXML) {

			var items = originalRequest.responseXML.getElementsByTagName("item");
	   		if (items.length > 0) {
				
	        	 if (items.length == 1) {
		        	// fill out
	        		selectValue(getAjaxParamName(items[0]),getAjaxParamValue(items[0]));
		        	Element.hide(fieldname + "_choices");
				     
				 } else  {
		        	 
		        	 var suggestBoxHTML = "";
		        	 for (i = 0; i < items.length; i++) {
		        	 	suggestBoxHTML += "<span class='suggestions' id='item" + i + "' onmouseover='overValue(this)' onmouseout='outValue(this)' onmousedown='selectValue(this.innerHTML,\"" + getAjaxParamValue(items[i]) + "\")'>"+getAjaxParamName(items[i])+"</span> | ";
				     }
				     Element.update(fieldname + "_choices",suggestBoxHTML);
				}
	    	}
    	} else {
    		Element.update(fieldname + "_choices","<small><i>nothing found</i></small>");
    	}
	} 
} 

var targetDropElement;

function updateDropDown(datasoure,targetid,selectorElement) {
	var selectedId = $F(selectorElement);
	targetDropElement = $(targetid);
	var url= (datasoure + selectedId).split("?");
	var rurl = url[0];
	var rparams = url[1];
	var myAjax = new Ajax.Request(rurl,{method: 'get',parameters: rparams,onComplete: onUpdateDropDown});
	
	// clear old dropdown
	for (var i = (targetDropElement.options.length-1); i >= 0; i--){
        targetDropElement.options[i]=null;
    }
	var newOption  = new Option("please wait ....", "", false, true);
	targetDropElement.options[0] = newOption;
}

function onUpdateDropDown (originalRequest) {
	if (originalRequest.readyState==4 || originalRequest.readyState=="complete") { 
		if (originalRequest.responseXML) {
			var items = originalRequest.responseXML.getElementsByTagName("item");
			for (var i = 0; i < items.length; i++){
				var newOption  = new Option(items[i].firstChild.nodeValue, items[i].getAttribute("value"), false, true);
				targetDropElement.options[i]=newOption;
			}
			targetDropElement.selectedIndex = 0;
    	} else {
    		targetDropElement.options[0].text = "nothing found";
    	}
	} 
}
