function handleclick(field,txtval){
		$('#' + field).val(txtval);
		$('#suggestions').hide();
		$('#suggestions').html('');
	}
AutoComplete = function(input,  param)
{
	var timer;

	var suggestions = document.getElementById("suggestions")
	var strinput = input;
	$('#' + input).attr("autocomplete","off")
	input = $('#' + input)
	
	$(input).keyup(function(event){
							
							 handleKeyUp(event)
						 });
	$(input).keydown(function(event){
							  if (event.keyCode == 13){
								  event.preventDefault()
							  }
							  handleArrowKeys(event)
							   
						  });

	function handleKeyUp(event)
	{
		
		if (event.keyCode != 40 && event.keyCode != 38 && event.keyCode != 13)
		{
			if ($(input).length == 0)
				$('#suggestions').hide();
				$('#suggestions').html('');

			if (timer)
				clearTimeout(timer);

			if ($(input).length > 0){
				timer = setTimeout(reload, 400);
			}
		}
		else if (event.keyCode == 13)
		{
			var cursor = getCursor();
			var parent = document.getElementById('autocomplete');
			
			if (cursor != -1 && cursor < parent.childNodes.length)
			{
				
				//if ($.browser.msie)
//					$(input).val(parent.childNodes[cursor].id);
//				else
				$(input).val(parent.childNodes[cursor].id);
				$('#suggestions').hide();
				$('#suggestions').html('');		
			}
		}
	}
	
	function reload()
	{
		var strval = $(input).val()
		
		overlay(strinput,'suggestions','bottom')
		if(strval.length){
		$.ajax({
						   type: "GET",
						   url: "/autocomplete/" + param + ".cfm?caller=" + strinput + "&str=" + strval,
						   success: function(msg){
							  
							 suggestions.innerHTML = msg;
							 $('#suggestions').show();
							
							 if (msg.length == 119){
								$('#suggestions').hide();
								$('#suggestions').html('');
							 }else{
								var parent = document.getElementById('autocomplete');
								
								for (var i = 0; i < parent.childNodes.length; i++){
														
									$('div[@id=' + parent.childNodes[i].id +']').click(function(){
																					handleclick(strinput,this.id)}
																			);
								}
							}
						   },
						   error: function(){alert('an error')}
						});
		
		}
		else{
			$('#suggestions').hide();
			$('#suggestions').html('');
		}				  
	}

	function handleArrowKeys(event)
	{
		
		try
		{
			var cursor = getCursor();
			var parent = document.getElementById('autocomplete');
			
			if (cursor != -1 && (event.keyCode == 40 || event.keyCode == 38))
			{
				if (event.keyCode == 40)
				{
					if (cursor == parent.childNodes.length)
						parent.childNodes[0].style.backgroundColor = "#a3ceff";
					else if (cursor < parent.childNodes.length - 1)
					{
						parent.childNodes[cursor].style.backgroundColor = "";
						parent.childNodes[cursor + 1].style.backgroundColor = "#a3ceff";
					}
				}
				else
				{
					if (cursor > 0)
					{
						parent.childNodes[cursor].style.backgroundColor = "";
						parent.childNodes[cursor - 1].style.backgroundColor = "#a3ceff";
					}
				}
			}
			
			if (event.keyCode == 13 && $.browser.msie){
				var cursor = getCursor();
				var parent = document.getElementById('autocomplete');
				
				if (cursor != -1 && cursor < parent.childNodes.length)
				{
					$(input).val(parent.childNodes[cursor].innerText);
					$('#suggestions').hide();
					$('#suggestions').html('');
				}				
			}
		}
		catch (e) {  }
	}

	function getCursor()
	{
		if (suggestions.innerHTML.length == 0)
			return -1;

		var parent = document.getElementById('autocomplete');

		for (var i = 0; i < parent.childNodes.length; i++)
			if (
					parent.childNodes[i].style.backgroundColor == "#a3ceff" ||
					parent.childNodes[i].style.backgroundColor == "rgb(163, 206, 255)"
			   )
				return i;

		return parent.childNodes.length;
	}
	
	function getposOffset(overlay, offsettype){
		
		var totaloffset = (offsettype == 'left') ? overlay.offsetLeft : overlay.offsetTop;
		var parentEl = overlay.offsetParent;
		var outer = 0;
		if (offsettype == 'left')
			outer = ((document.body.clientWidth - document.getElementById('container').offsetWidth) / 2);
		while (parentEl != null){
			totaloffset = (offsettype == 'left') ? totaloffset + parentEl.offsetLeft : totaloffset + parentEl.offsetTop;
			parentEl = parentEl.offsetParent;
		}
		return totaloffset - outer ;
	}
	function overlay(curobj, subobjstr, opt_position){
		var subobj = document.getElementById(subobjstr);
		var curobj = document.getElementById(curobj);
		//subobj.style.display = (subobj.style.display != "block") ? "block" : "none";
		
		var xpos = getposOffset(curobj, "left") + ((typeof opt_position != "undefined" && opt_position.indexOf("right") != -1) ? - (subobj.offsetWidth - curobj.offsetWidth) : 0);
		var ypos = getposOffset(curobj, "top") + ((typeof opt_position != "undefined" && opt_position.indexOf("bottom") != -1) ? curobj.offsetHeight : 0);
		subobj.style.left = xpos + "px";
		subobj.style.top = ypos + "px";
		
		return false;
	}
}