function calcDivContainer(elem)
{
	if(browser != "IE")
	{
		return true;
	}

	/*
	if(navigator.userAgent.toLowerCase().indexOf("msie") == -1)
	{
		return mCalcDivContainer(elem);
	}
	*/
	
	if((!elem.nextSibling || elem.nextSibling.tagName != "BR") && elem.value.length > 0)
	{
		if(elem.nextSibling && elem.nextSibling.tagName != "BR")
		{
			elem.nextSibling.removeNode(true);
		}
		
		var obj =  document.createElement("br");
		var br = elem.parentElement.appendChild(obj);
		
		var obj = document.createElement("div");
		var div = elem.parentElement.appendChild(obj);
	
		div.id = "listElements";
		div.style.left = "auto";
		div.style.height = "200";
		div.style.position = "absolute";
		div.style.width = elem.currentStyle.width;
		div.style.top = "auto";
		div.style.backgroundColor = "#ffffff";
		div.style.borderWidth = "1px";
		div.style.borderStyle = "solid";
		div.style.borderColor = "#b1b1b1";

		
		var obj = document.createElement("table");
		var tab = div.appendChild(obj);
		tab.style.width = "100%";
		
		fillDivContainer(elem);
		
	}
	else if(elem.value.length == 0 )
	{
		removeDivContainer(elem);
		setSelectsVisible(true, 3);
	}
	else
	{
		if(event.keyCode == 38 || event.keyCode == 40)
		{
			handleKeyUp();
		}
		else	
		{
			if(event.keyCode == 13)
			{
				removeDivContainer(elem);
				for(var selectElement = 0; selectElement < 4; selectElement++)
				{
					document.getElementsByTagName("select")[selectElement].style.visibility = "visible";
				}
			}
			else if(event.keyCode == 8)
			{
				return true;
			}
			else
			{
				
				var origTextLength = elem.value.length;
				fillDivContainer(elem);

				if(document.getElementById("listElements"))
				{
					elem.value = document.getElementById("listElements").lastChild.rows[0].cells[0].innerText;
					if(origTextLength < elem.value.length)
					{
						var oText = elem.createTextRange();
						oText.findText(elem.value.substring(origTextLength, elem.value.length));
						oText.select();
					}			
				}
			}
		}
	}
}

function removeDivContainer(elem)
{
	if(elem.parentElement.childNodes.length > 1)
	{
		while(elem.nextSibling)
		{
			elem.nextSibling.removeNode(true);
		}
		return true;
	}
}

function fillDivContainer(elem)
{
	if(elem.value.length == 0)
	{
		removeDivContainer(elem);
	}
	else
	{
		var baseNode = document.getElementById("listElements").lastChild;
	
		var rows = baseNode.rows;
		for(a = rows.length-1; a > -1; a--)
		{
			rows(a).removeNode(true);
		}
	
		var b = 0;
	
		for(a = 0; a < liste.length; a++)
		{
			if(b == 20)
			{
				break;
			}
		
			if(liste[a].substring(0, elem.value.length).toLowerCase() == elem.value.toLowerCase())
			{
				newRow = baseNode.insertRow(baseNode.rows.length);
				newCell = newRow.insertCell();
				newCell.innerHTML = liste[a];
				if(navigator.userAgent.toLowerCase().indexOf("msie") != -1)
				{
					newCell.attachEvent('onmouseover', handleMouseOver);
					newCell.attachEvent('onmouseout', handleMouseOut);
					newCell.attachEvent('onmouseup', handleMouseUp);
				}
				else
				{
					
					newCell.addEventListener('onmouseover', mHandleMouseOver, true);
					newCell.addEventListener('onmouseout', mHandleMouseOut, true);
					newCell.attachEvent('onmouseup', mHandleMouseUp, true);
				}

				if(b == 0)
				{
					newCell.style.setAttribute('backgroundColor', '#dbe6f2');
				}
				b++;
			}
		}
		
		if(b < 1)
		{
			removeDivContainer(elem);
			setSelectsVisible(true, 3);
		}
		else
		{
			var eCount = b < 15 ? 2 : 3;
			setSelectsVisible(false, eCount);
		}

	}
}

function handleMouseOver()
{
	var elem = event.srcElement;
	elem.style.cursor='hand'; 
	elem.style.setAttribute('backgroundColor','#dbe6f2'); 
}

function handleMouseOut()
{
	var elem = event.srcElement;
	elem.style.removeAttribute('backgroundColor');
}

function handleMouseUp()
{
	var elem = event.srcElement;
	var target = document.getElementById("listElements").parentElement.firstChild;
	target.value = elem.innerHTML;
	removeDivContainer(target);
	setSelectsVisible(true, 3);

	target.focus();
}

function handleKeyUp()
{
/*
	if(event.keyCode != 38 && event.keyCode != 40)
	{
		alert(event.keyCode);
	}
*/	
	var check = false;
	var elem = event.srcElement;
	if(elem.parentElement.childNodes.length < 3)
	{
		return true;
	}
	
	var baseNode = document.getElementById("listElements").firstChild;
	var rows = baseNode.rows;

	for(a = 0; a < rows.length; a++)
	{
		if(event.keyCode == 38)
		{
			if(a > 0 && rows(a).cells(0).style.backgroundColor == "#dbe6f2")
			{
				rows(a-1).cells(0).style.setAttribute("backgroundColor", "#dbe6f2")
				rows(a).cells(0).style.removeAttribute("backgroundColor");
				elem.value = rows(a-1).cells(0).innerText;
				check = true;
				break;
			}
		}	
		else if(event.keyCode == 40)
		{		
			if(a < (rows.length-1) && rows(a).cells(0).style.backgroundColor == "#dbe6f2")
			{
				rows(a+1).cells(0).style.setAttribute("backgroundColor", "#dbe6f2");
				rows(a).cells(0).style.removeAttribute("backgroundColor");
				elem.value = rows(a+1).cells(0).innerText;
				check = true;
				break;
			}
		}
	}

	if(!check)
	{
		if(rows(rows.length-1).cells(0).style.backgroundColor != "#dbe6f2")
		{
			rows(0).cells(0).style.setAttribute("backgroundColor", "#dbe6f2");
			elem.value = rows(0).cells(0).innerText;
		}
	}
	return true;
}

function handleKeyDown(elem)
{
	if(browser != "IE")
	{
		return true;
	}

	if(event.keyCode == 9)
	{
		removeDivContainer(elem);
		setSelectsVisible(true, 3);
	}
	
	return true;
}


function handleGlobalMouseUp()
{
	if(event.srcElement.id != "listElements" && event.srcElement.tagName.toLowerCase() != "input")
	{
		var test = document.getElementById("listElements");
		if(test)
		{
			removeDivContainer(test.parentElement.firstChild);
		}
	}
}

function setSelectsVisible(on, eCount)
{
	for(var selectElement = 0; selectElement < eCount; selectElement++)
	{
		document.getElementsByTagName("select")[selectElement].style.visibility = on == true ? "visible" : "hidden";
	}
}

/* ---------- for mozilla --------- */

mHandleKeyUp = function(e)
{
	if(window.Event.keyCode != 38 && window.Event.keyCode != 40)
	{
		alert(event.keyCode);
	}
	
	var check = false;
	var elem = window.Event.srcElement;
	if(elem.parentElement.childNodes.length < 3)
	{
		return true;
	}
	
	var baseNode = document.getElementById("listElements").firstChild;
	var rows = baseNode.rows;

	for(a = 0; a < rows.length; a++)
	{
		if(window.Event.keyCode == 38)
		{
			if(a > 0 && rows(a).cells(0).style.backgroundColor == "#dbe6f2")
			{
				rows(a-1).cells(0).style.setAttribute("backgroundColor", "#dbe6f2")
				rows(a).cells(0).style.removeAttribute("backgroundColor");
				elem.value = rows(a-1).cells(0).innerText;
				check = true;
				break;
			}
		}	
		else if(window.Event.keyCode == 40)
		{		
			if(a < (rows.length-1) && rows(a).cells(0).style.backgroundColor == "#dbe6f2")
			{
				rows(a+1).cells(0).style.setAttribute("backgroundColor", "#dbe6f2");
				rows(a).cells(0).style.removeAttribute("backgroundColor");
				elem.value = rows(a+1).cells(0).innerText;
				check = true;
				break;
			}
		}
	}

	if(!check)
	{
		if(rows(rows.length-1).cells(0).style.backgroundColor != "#dbe6f2")
		{
			rows(0).cells(0).style.setAttribute("backgroundColor", "#dbe6f2");
			elem.value = rows(0).cells(0).innerText;
		}
	}
	return true;
}

mHandleKeyUp = function(e)
{
	
}

mHandleMouseUp = function(e)
{
	
}

mHandleMouseDown = function(e)
{
	
}

mHandleMouseOver = function(e)
{
	alert("Over");
}

mHandleMouseOut = function(e)
{
	
}

mCalcDivContainer = function(elem)
{
	if((!elem.nextSibling || elem.nextSibling.tagName != "BR") && elem.value.length > 0)
	{
		if(elem.nextSibling && elem.nextSibling.tagName != "BR")
		{
			try
			{
				elem.nextSibling.removeNode(true);
			}
			catch(e)
			{
				//alert(e.description);
			}
		}

		var obj =  document.createElement("br");
		var br = elem.parentNode.appendChild(obj);
		
		var obj = document.createElement("div");
		var div = elem.parentNode.appendChild(obj);
	
		div.id = "listElements";
		div.style.left = "auto";
		div.style.height = "200";
		div.style.position = "absolute";
		div.style.width = elem.style.width;
		div.style.top = "auto";
		div.style.backgroundColor = "#ffffff";
		div.style.borderWidth = "1px";
		div.style.borderStyle = "solid";
		div.style.borderColor = "#b1b1b1";

		var obj = document.createElement("table");
		var tab = div.appendChild(obj);
		tab.width = elem.style.width;		
		
		mFillDivContainer(elem);
		
	}
	else if(elem.value.length == 0 )
	{
		removeDivContainer(elem);
	}
	else
	{
		alert(event.keyCode);
		if(event.keyCode == 38 || event.keyCode == 40)
		{
			handleKeyUp();
		}
		else	
		{
			if(event.keyCode == 13)
			{
				removeDivContainer(elem);
			}
			else if(event.keyCode == 8)
			{
				return true;
			}
			else
			{
				
				var origTextLength = elem.value.length;
				fillDivContainer(elem);

				if(document.getElementById("listElements"))
				{
					elem.value = document.getElementById("listElements").lastChild.rows[0].cells[0].innerText;
					if(origTextLength < elem.value.length)
					{
						var oText = elem.createTextRange();
						oText.findText(elem.value.substring(origTextLength, elem.value.length));
						oText.select();
					}			
				}
			}
		}
	}
}

mHandleGlobalMouseUp = function(e)
{
	if(event.srcElement.id != "listElements" && event.srcElement.tagName.toLowerCase() != "input")
	{
		var test = document.getElementById("listElements");
		if(test)
		{
			removeDivContainer(test.parentElement.firstChild);
		}
	}
}

mFillDivContainer = function(elem)
{
	if(elem.value.length == 0)
	{
		removeDivContainer(elem);
	}
	else
	{
		var baseNode = document.getElementById("listElements").lastChild;
	
		var rows = baseNode.rows;
		for(a = rows.length-1; a > -1; a--)
		{
			rows(a).removeNode(true);
		}
	
		var b = 0;
	
		for(a = 0; a < liste.length; a++)
		{
			if(b == 20)
			{
				break;
			}
		
			if(liste[a].substring(0, elem.value.length).toLowerCase() == elem.value.toLowerCase())
			{
				var newObj = document.createElement("tr");
				var newRow = baseNode.appendChild(newObj);
				
				newObj = document.createElement("td");
				var newCell = newRow.appendChild(newObj);
				newCell.innerHTML = liste[a];

				newCell.addEventListener('onmouseover', mHandleMouseOver, true);
				newCell.addEventListener('onmouseout', mHandleMouseOut, true);
				newCell.addEventListener('onmouseup', mHandleMouseUp, true);

				if(b == 0)
				{
					//newCell.style.setAttribute('backgroundColor', '#dbe6f2');
				}
				b++;
			}
		}
		
		if(b == 0)
		{
			removeDivContainer(elem);
		}
	}
}
