	var states = new Array(
			"Alabama",
			"Alaska",
			"Alberta",
			"Arizona",
			"Arkansas",
			"British Columbia",
			"California",
			"Colorado",
			"Connecticut",
			"Delaware",
			"District of Columbia",
			"Florida",
			"Georgia",
			"Hawaii",
			"Idaho",
			"Illinois",
			"Indiana",
			"Iowa",
			"Kansas",
			"Kentucky",
			"Louisiana",
			"Maine",
			"Manitoba",
			"Maryland",
			"Massachusetts",
			"Michigan",
			"Minnesota",
			"Mississippi",
			"Missouri",
			"Montana",
			"Nebraska",
			"Nevada",
			"New Brunswick",
			"New Hampshire",
			"New Jersey",
			"New Mexico",
			"New York",
			"Newfoundland and Labrador",
			"North Carolina",
			"North Dakota",
			"Northwest Territories",
			"Nova Scotia",
			"Nunavut",
			"Ohio",
			"Oklahoma",
			"Ontario",
			"Oregon",
			"Pennsylvania",
			"Prince Edward Island",
			"Quebec",
			"Rhode Island",
			"Saskatchewan",
			"South Carolina",
			"South Dakota",
			"Tennessee",
			"Texas",
			"Utah",
			"Vermont",
			"Virginia",
			"Washington",
			"West Virginia",
			"Wisconsin",
			"Wyoming",
			"Yukon"

			);
	var outp;
	var oldins;
	var posi = -1;
	var words = new Array();
	var input;
	var key;

	function setVisible(visi){
		var x = document.getElementById("shadow");
		var t = document.getElementsByName("state")[0];
		x.style.position = 'absolute';
		x.style.top =  (findPosY(t)+3)+"px";
		x.style.left = (findPosX(t)+2)+"px";
		x.style.visibility = visi;
		// kludgy fix to IE bug
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
			var not_vis = '';
			if(visi=="hidden") not_vis="visible";
			if(visi=="visible") not_vis="hidden";
			document.forms[0].country.style.visibility=not_vis;
			document.forms[0].question.style.visibility=not_vis;
		}
	}

	function initStateProv(){
		outp = document.getElementById("output");
		window.setInterval("lookAt()", 100);
		setVisible("hidden");
		document.onkeydown = keygetter; //needed for Opera...
		document.onkeyup = keyHandler;
	}

	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent){
			while (obj.offsetParent){
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}

	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent){
			curtop += obj.offsetHeight;
			while (obj.offsetParent){
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if (obj.y){
			curtop += obj.y;
			curtop += obj.height;
		}
		return curtop;
	}
	
	function lookAt(){
		var ins = document.getElementsByName("state")[0].value;
		if (oldins == ins) return;
		else if (posi > -1);
		else if (ins.length > 0){
			words = getWord(ins);
			if (words.length > 0){
				clearOutput();
				for (var i=0;i < words.length; ++i) addWord (words[i]);
				setVisible("visible");
				input = document.getElementsByName("state")[0].value;
			}
			else{
				setVisible("hidden");
				posi = -1;
			}
		}
		else{
			setVisible("hidden");
			posi = -1;
		}
		oldins = ins;
	}
	
	function addWord(word){
		var sp = document.createElement("div");
		sp.appendChild(document.createTextNode(word));
		sp.onmouseover = mouseHandler;
		sp.onmouseout = mouseHandlerOut;
		sp.onclick = mouseClick;
		outp.appendChild(sp);
	}

	function clearOutput(){
		while (outp.hasChildNodes()){
			noten=outp.firstChild;
			outp.removeChild(noten);
		}
		posi = -1;
	}
	
	function getWord(beginning){
		var words = new Array();
		for (var i=0;i<states.length; ++i){
			var j = -1;
			var correct = 1;
			while (correct == 1 && ++j < beginning.length){
				if (states[i].charAt(j) != beginning.charAt(j).toLowerCase()) {
					if (states[i].charAt(j) != beginning.charAt(j).toUpperCase())
						correct = 0;
					}
				}
			if (correct == 1) words[words.length] = states[i];
		}
		return words;
	}
	
	function setColor (_posi, _color, _forg){
		outp.childNodes[_posi].style.background = _color;
		outp.childNodes[_posi].style.color = _forg;
	}

	function keygetter(event){
		if (!event && window.event) event = window.event;
		if (event) key = event.keyCode;
		else key = event.which;
	}

	function keyHandler(event){
		if (document.getElementById("shadow").style.visibility == "visible"){
			var textfield = document.getElementsByName("state")[0];
			if (key == 40){ //Key down cursor
				//alert (words);
				if (words.length > 0 && posi < words.length-1){
					if (posi >=0) setColor(posi, "#fff", "black");
					else input = textfield.value;
					setColor(++posi, "blue", "white");
					textfield.value = outp.childNodes[posi].firstChild.nodeValue;
				}
			}
			else if (key == 38){ //Key up cursor
				if (words.length > 0 && posi >= 0){
					if (posi >=1){
						setColor(posi, "#fff", "black");
						setColor(--posi, "blue", "white");
						textfield.value = outp.childNodes[posi].firstChild.nodeValue;
					}
					else{
						setColor(posi, "#fff", "black");
						textfield.value = input;
						textfield.focus();
						posi--;
					}
				}
			}
			else if (key == 13 || key == 9){ // Enter and tab
				textfield.value = input;
				setVisible("hidden");
				if(posi > -1){
					textfield.value = outp.childNodes[posi].firstChild.nodeValue;
				}
				posi = -1;
			}
			else if (key == 27){ // Escape
				textfield.value = input;
				setVisible("hidden");
				posi = -1;
				oldins = input;
			}
			else if (key == 8){ // Backspace
				posi = -1;
				oldins=-1;
			}
		}
	}
	
	var mouseHandler=function(){
		for (var i=0;i < words.length;++i)
			setColor (i, "white", "black");
	
		this.style.background = "blue";
		this.style.color= "white";
	}
	
	var mouseHandlerOut=function(){
		this.style.background = "white";
		this.style.color= "black";
	}
	
	var mouseClick=function(){
		document.getElementsByName("state")[0].value = this.firstChild.nodeValue;
		setVisible("hidden");
		posi = -1;
		oldins = this.firstChild.nodeValue;
	}

