

	var csm_cursorpos=0;
	var csm_citycount=0;
	
	var csm_maxheight=300;
	var csm_lineh=16;
	var csm_scrolled=0;
	
	cityids = new Array();

function init_citysmart() {
	document.getElementById("citysmart").style.display ='inline';
	if (navigator.appName == "Microsoft Internet Explorer") {
		document.getElementById("csm_suggest").style.width= "200px";	
	}
}

		
function csm_getcitylist(searchword) {
	var citylist = "";
	var pos = 0;
	for (c=0; c<cities.length; c++)  {
		if (searchword.length < 3) { var re = new RegExp("^"+searchword, "i") }
		else { var re = new RegExp(searchword, "i")	}
		if ( re.test(cities[c]['name']) ) {
			if (csm_cursorpos == (c+1)) css = "selected"; else css = "normal"
			citylist = citylist + "<div id=\"csm_listpos_" + (pos+1) + "\" class=\"" + css + "\"><a tabindex=\"" + (pos+3) + "\" onblur=\"csm_unmovecursor("+(pos+1)+")\" onfocus=\"csm_movecursor("+(pos+1)+")\" href=\"javascript:csm_writesearchfield(\'" + c + "\')\">" + cities[c]['name'] + "</a></div>";
			pos++; csm_citycount = pos;
		}
	}
	return citylist;
}

function csm_getcityids(searchword) {
	citylist = new Array;
	var pos = 0;
	for (c=0; c<cities.length; c++)  {
		if (searchword.length < 3) { var re = new RegExp("^"+searchword, "i") }
		else { var re = new RegExp(searchword, "i")	}
		if ( re.test(cities[c]['name']) ) {
			citylist[pos] = c; pos++; 
		}
	}
	return citylist;
}


function csm_closelist() {
	if (document.getElementById("csm_suggest").style.display != 'none') {
		document.getElementById("csm_suggest").style.display = 'none';
		csm_cursorpos=0;
		csm_citycount=0;
		document.getElementById("csm_suggest").scrollTop=0;
		csm_scrolled=0;
		//debug:
		//document.getElementById("csm_quicktext").value = "y:--  scrl:" + csm_scrolled;
	}
}

function csm_showall() {
	cityidlist = new Array;
	var citylist = "";
	var suggestlist = document.getElementById("csm_suggest");
	for (c=0; c<cities.length; c++) {
		citylist = citylist + "<div id=\"csm_listpos_" + (c+1) + "\" class=\"normal\"><a tabindex=\"" + (c+3) + "\" onblur=\"csm_unmovecursor("+(c+1)+")\" onfocus=\"csm_movecursor("+(c+1)+")\" href=\"javascript:csm_writesearchfield(\'" + c + "\')\">" + cities[c]['name'] + "</a></div>";
		cityidlist[c] = c;
	}
	cityids = cityidlist;
	suggestlist.style.display = 'inline';
	suggestlist.style.height = csm_maxheight + 'px';
	suggestlist.innerHTML = citylist;
	csm_cursorpos=0;
	csm_citycount=cityidlist.length;
	csm_all=true;
}


function csm_showlist(list) {
	var suggestlist = document.getElementById("csm_suggest");
	suggestlist.style.display = 'inline';
	suggestlist.innerHTML = list;
}


function csm_closeopen() {
	var searchfield = document.getElementById("csm_searchfield");
	document.getElementById("csm_suggest").scrollTop=0;
	csm_scrolled=0;
	if (document.getElementById("csm_suggest").style.display == 'none') {
		if (searchfield.value != "" && csm_getcitylist(searchfield.value) != "") {
			csm_showlist(csm_getcitylist(searchfield.value))
			cityids = csm_getcityids(searchfield.value);
		}
		else {
			csm_showall();
		}
		document.getElementById("csm_searchfield").focus();
		document.getElementById("csm_openclose").src = "_sites/" + csm_site + "/pics/csm_close.gif";
	}
	else {
		csm_closelist();
		document.getElementById("csm_openclose").src = "_sites/" + csm_site + "/pics/csm_open.gif";
		}
}

function csm_suggest(event) {
	var citylist;
	var suggestlist = document.getElementById("csm_suggest");
	var searchfield = document.getElementById("csm_searchfield");
	var cityid = document.getElementById("csm_cityid");
	
	
	if (event.keyCode != 40 && event.keyCode != 38 && event.keyCode != 13) {
		csm_cursorpos = 0;
		csm_citycount=0;
		while (cityids.length != 0) { cityids.pop(); }
		
		if (searchfield.value != "" && csm_getcitylist(searchfield.value) != "") {
			csm_showlist(csm_getcitylist(searchfield.value))
			cityids = csm_getcityids(searchfield.value);
			document.getElementById("csm_openclose").src = "_sites/" + csm_site + "/pics/csm_close.gif";
			suggestlist.style.height = 'auto';
		}
		else {
			csm_closelist();
			document.getElementById("csm_openclose").src = "_sites/" + csm_site + "/pics/csm_open.gif";
		}
	}
}

function csm_writesearchfield(num) {
	var suggestlist = document.getElementById("csm_suggest");
	var searchfield = document.getElementById("csm_searchfield");
	var cityid = document.getElementById("csm_cityid");
	
	searchfield.value = cities[num]['name'];
	cityid.value = cities[num]['id'];
	suggestlist.style.display = 'none';
	document.getElementById("csm_openclose").src = "_sites/" + csm_site + "/pics/csm_open.gif";
	//document.getElementById("csm_button").focus();
}

function csm_unmovecursor(pos) {
	document.getElementById("csm_listpos_" + pos).className="normal";
}

function csm_movecursor(pos) {
	csm_cursorpos=pos;
	document.getElementById("csm_listpos_" + pos).className="selected";

}


function csm_keycheck(event) {
	//alert(event.keyCode);
	var suggestlist = document.getElementById("csm_suggest");
	csm_scrolled = document.getElementById("csm_suggest").scrollTop;
	if((event.keyCode == 40 ) && csm_citycount>0) {
      //cursorkey down
		if (csm_cursorpos==0 || csm_cursorpos<csm_citycount) {
	  		if (csm_cursorpos != 0) csm_unmovecursor(csm_cursorpos);
			//jump to element if not in view
			if (document.getElementById("csm_listpos_" + (csm_cursorpos+1)).offsetTop>=(csm_maxheight+csm_scrolled) || (document.getElementById("csm_listpos_" + (csm_cursorpos+1)).offsetTop-csm_scrolled)<0) {
				document.getElementById("csm_suggest").scrollTop = document.getElementById("csm_listpos_" + (csm_cursorpos+1)).offsetTop - (csm_maxheight-document.getElementById("csm_listpos_" + (csm_cursorpos+1)).offsetHeight);
			}
			csm_movecursor (csm_cursorpos+1);
		}
	 	else {
	  		if (csm_cursorpos==csm_citycount) {
				csm_unmovecursor (csm_cursorpos);
				document.getElementById("csm_suggest").scrollTop=0;
				csm_scrolled=0;
				csm_movecursor (1);
			}				
	  	}
    }
    if(event.keyCode == 38 && csm_citycount>0) {
	 //cursorkey up 
	 	if (csm_cursorpos==csm_citycount || csm_cursorpos>1) {
	  		if (csm_cursorpos != 0) csm_unmovecursor(csm_cursorpos);
			//jump to element if not in view
			if (document.getElementById("csm_listpos_" + (csm_cursorpos-1)).offsetTop>(csm_maxheight+csm_scrolled) || (document.getElementById("csm_listpos_" + (csm_cursorpos-1)).offsetTop-csm_scrolled)<0) {
				document.getElementById("csm_suggest").scrollTop = document.getElementById("csm_listpos_" + (csm_cursorpos-1)).offsetTop;
			}
			csm_movecursor (csm_cursorpos-1);
		}
 		else {
			if (csm_cursorpos==0 || csm_cursorpos==1) {
				if (csm_cursorpos != 0) csm_unmovecursor(csm_cursorpos);
				csm_movecursor (csm_citycount);
				document.getElementById("csm_suggest").scrollTop=document.getElementById("csm_listpos_" + (csm_citycount)).offsetTop;
			}	
		}
    }
	//ENTER
	if((event.keyCode == 13 || event.keyCode == 9) && csm_citycount>0 && csm_cursorpos>0) {
		
		csm_writesearchfield(cityids[csm_cursorpos-1]);
		document.getElementById("csm_searchfield").focus();
	}
	//debug:
	//if (csm_cursorpos > 0)
	//document.getElementById("csm_quicktext").value = "y:" + document.getElementById("csm_listpos_" + (csm_cursorpos)).offsetTop + " scrl:" + csm_scrolled + " curs:" + csm_cursorpos;

}
