function snSetup() {
	
	var mainForm = $("div#content form");

	mainForm.submit(function(event) {
		var cat2;
		if ($("#ga_cat1").val() == "1_suggest") {
			cat2 = "2_suggest_";
		} else if ($("#ga_cat1").val() == "1_search") {
			cat2 = "2_search_";
		}

		if ($("#what").val() != "" && $("#where").val() != "") {
			cat2 += "what_where";
		} else if ($("#what").val() != "") {
			cat2 += "what";
		} else if ($("#where").val() != "") {
			cat2 += "where";
		} 

		$("#ga_cat2").val(cat2);
		return true;
	});

	function whereCallback(event, data, formatted) {
		var bestId = data.ID;
		if (data.reference_id != "") {
			bestId = data.reference_id;
		}
		$("#ga_cat1").val("1_suggest");

		// handle the selection
		switch (data.SN_type) {
		 case "name_wo":
		 case "name_was":
		  $("#what").val(data.SN_value);
		  $("#where").val(data.ZIP + " " + data.locality);
		  $("#coords").val(data.coords);
		  if (bestId != "") {
			  $("#ID").val(bestId);
			  mainForm.attr("action", "/entries/" + bestId);
		  }
		  break;

		 case "name":
		  if (bestId != "") {
			  $("#what").val(data.SN_value);
			  $("#where").val(data.ZIP + " " + data.locality);
			  $("#ID").val(bestId);
			  $("#coords").val(data.coords);
			  mainForm.attr("action", "/entries/" + bestId);
		  }
		  break;

		 case "vorwahl":
		  $("#where").val(data.v_rubrik1);

		  // Set the hidden field: coords
		  $("#coords").val(data.coords);
		  break;

		 case "tel":
		  $("#what").val(data.tel);
		  $("#ID").val(bestId);
		  mainForm.attr("action", "/entries/" + bestId);
		  break;

		 case "tcount":
		  $("#where").val(whereVal);
		  break;

		 case "rubrik":
		  $("#what").val("");
		  $("#where").val(whereVal);

		  // Set the hidden fields: cat & coords
		  $("#cat").val(data.SN_value);
		  $("#coords").val(data.coords);
		  break;
		  
		 case "ort":
		  // Set the hidden field: coords
		  $("#coords").val(data.coords);
		  break;
		}
		mainForm.submit();
	}

	$("#where").result(whereCallback);
 
	function whatCallback(event, data, formatted) {
		var bestId = data.ID;
		if (data.reference_id != "") {
			bestId = data.reference_id;
		}
		$("#ga_cat1").val("1_suggest");

		// handle the selection
		switch (data.SN_type) {
		 case "name_wo":
		 case "name_was":
		  $("#where").val(data.ZIP + " " + data.locality);
		  $("#coords").val(data.coords);
		  if (bestId != "") {
			  $("#ID").val(bestId);
           mainForm.attr("action", "/entries/" + bestId);
		  }
		  break;

		 case "name":
		  if (bestId != "") {
			  $("#where").val(data.ZIP + " " + data.locality);
			  $("#ID").val(bestId);
			  $("#coords").val(data.coords);
           mainForm.attr("action", "/entries/" + bestId);
		  } else {
			  $("#where").val("");
		  }
		  break;

		 case "vorwahl":
		  $("#what").val(whatVal);
		  $("#where").val(data.v_rubrik1);
		  // Set the hidden field: coords
		  $("#coords").val(data.coords);
		  break;

		 case "tel":
		  $("#what").val(data.tel);
		  $("#ID").val(bestId);
		  mainForm.attr("action", "/entries/" + bestId);
		  break;

		 case "tcount":
		  $("#what").val(whatVal);
		  break;
		 case "rubrik":
		  $("#what").val("");
		  // Set the hidden fields: cat, coords
		  $("#cat").val(data.SN_value);
		  $("#coords").val(data.coords);
		  break;
		}
		mainForm.submit();
	}

	$("#what").result(whatCallback);
 

	function formatWhat(row, i, count, dispStr, term) {
		var inHtml = row.SN_value;

		switch (row.SN_value) {
		 case "name":
		  var extra = "";
		  if (row.prefix != "") {
			  extra = " (" + row.prefix + ") ";
		  }
		  if (i <= 1)
			  inHtml = $("#name_was").val() + extra + $("#refinedby").val();
		  else
			  inHtml = $("#whatname").val() + extra + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "tcount":
		  inHtml = $("#tcount").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "tel":
		  inHtml = $("#tel").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "name_was":
		  inHtml = $("#name_was").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "name_wo":
		  inHtml = $("#name_wo").val() + " &#132;" + $("#where").val() + "&#147;" + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "rubrik":
		  inHtml = $("#rubrik").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "vorwahl":
		  inHtml = $("#vorwahl").val();
		  return inHtml;
		  break;
		}

		switch (row.SN_type) {
		 case "name":
		  if (row.ID == "" && row.locality == "" && row.tel == "") {
			  inHtml = "<span class='col1 idnt' style='width:290px; " +
				  "min-width:290px; max-width:290px;'>" + row.SN_value + "</span>" +
				  "<span class='col2 count'>" + row.prefix + "</span>";
		  } else {
			  inHtml = "<span class='col1 idnt'>" + row.SN_value + "</span>" +
				  "<span class='col2 city'>" + row.ZIP + " " +
				  row.locality + "</span>";
		  }
		  break;

		 case "name_was":
		 case "name_wo":
		  inHtml = "<span class='col1 idnt'>" + row.SN_value + "</span>" +
			  "<span class='col2 city'>" + row.ZIP + " " +
			  row.locality + "</span>";
		  break;

		 case "rubrik":
		  inHtml = "<span class='col1 idnt'>" + row.SN_value + "</span>";
		  break;

		 case "vorwahl":
		  var vw = row.SN_value.split(/\|/).join(", ");
		  inHtml = "<span class='col1 idnt'>" + vw + "</span>" +
			  "<span class='col2 city'>" + row.v_rubrik1 + "</span>";

		  break;

		 case "tcount":
		  inHtml = "<span class='col1'>" + row.SN_value + " " + $("#hits").val() + "</span>";
		  break;

		 case "tel":
		  inHtml = "<span class='col1 idnt' " +
			  "style='width:125px; min-width:125px; max-width:125px;'>" +
			  row.tel + " (" + row.num_type + ")</span>" +
			  "<span class='col2' style='width:210px; min-width:210px;'>" +
			  row.SN_value + "</span>" +
			  "<span class='col2' style='padding-left:11px;'>" +
			  row.ZIP + " " + row.locality + "</span>";

		  break;
		
		}
		return inHtml;
	}


	function formatWhere(row) {
		var inHtml = row.SN_value;
		var ort = row.extra_info;

		switch (row.SN_value) {
		 case "ort":
		  inHtml = $("#ort").val();
		  return inHtml;
		  break;
		 case "tcount":
		  inHtml = $("#tcount").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "tel":
		  inHtml = $("#tel").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "name_was":
		  inHtml = $("#name_was").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "name_wo":
		  inHtml = $("#name_wo").val() + " &#132;" + whereVal + "&#147;" +
			  $("#refinedby").val();
		  return inHtml;
		  break;
		 case "rubrik":
		  inHtml = $("#rubrik").val() + $("#refinedby").val();
		  return inHtml;
		  break;
		 case "vorwahl":
		  inHtml = $("#vorwahl").val();
		  return inHtml;
		  break;
		}

		switch (row.SN_type) {
		 case "name_was":
		 case "name_wo":
		  inHtml = "<span class='col1 idnt'>" + row.SN_value + "</span>" +
			  "<span class='col2 city'>" + row.ZIP + " " + row.locality + "</span>";
		  break;

		 case "rubrik":
		  inHtml = "<span class='col1 idnt'>" + row.SN_value + "</span>";
		  break;

		 case "vorwahl":
		  var vw = row.SN_value.split(/\|/).join(", ");
		  inHtml = "<span class='col1 idnt'>" + vw + "</span>" +
			  "<span class='col2 city'>" + row.v_rubrik1 + "</span>";

		  break;
		
		 case "ort":
		  inHtml = "<span class='col1 idnt' style='color:gray;'>" 
			  + "&nbsp;" + "</span>"
			  + "<span class='col2 city'>" + row.SN_value + "</span>";

		  break;

		 case "vorwahl":
		  var vw = row.SN_value.split(/\|/).join(", ");
		  inHtml = "<span class='col1'>" + vw + "</span>" +
			  "<span class='col2 city'>" + ort + "</span>";
		  break;

		 case "tcount":
		  inHtml = "<span class='col1'>" + row.SN_value + " " + $("#hits").val() + "</span>";
		  break;

		 case "tel":
		  inHtml = "<span class='col1 idnt' style='width:120px; min-width:120px; max-width:120px;'>" + row.tel + " (" + row.num_type + ")</span>" +
			  "<span class='col2' style='width:210px; min-width:210px;'>" + row.SN_value + "</span>" +
			  "<span class='col2' style='padding-left:11px;'>" + row.ZIP + " " + row.locality + "</span>";

		  break;
		}

		return inHtml;
	}

	$("#what").autocomplete("/sn", {
		max: 30,
		extraParams: { ID: "snn", search_city: getWhereValue, locality: getLocVal, v_search_city1: getLoc2Val, rubrik: getCatVal  },
				  //extraParams: { ID: "snn", search_city: getWhereValue  },
		formatItem: formatWhat,
		formatFooter: formatWhatFooter,
		width: 588,
		highlight: false
		}).focus();
	
	$("#where").autocomplete("/sn", {
		max: 30,
		extraParams: { ID: "snl", name: getWhatValue, locality: getLocVal, v_search_city1: getLoc2Val, rubrik: getCatVal },
				  //extraParams: { ID: "snl", name: getWhatValue },
		formatItem: formatWhere,
		formatFooter: formatWhereFooter,
		width: 588,
		searchFields: ["search_city"],
		leftOffset: -365,
		highlight: false
		});

	if($("#what").val() != "" && $("#where").val() == ""){
		$("#where").focus();
	}


	$("#simCityNavTree").treeview({
		collapsed: true,
		animated: "fast",
		persist: "cookie",
		cookieId: "extel-simCityTree"
	   });

	$("#areaCityNavTree").treeview({
		animated: "fast",
		persist: "cookie",
		cookieId: "extel-areaCityTree"
	   });

	$("a.removeLink").attr("href", "javascript:void(0);").click(function() {
		clearFieldSubmit($(this).attr("name"));
	   });

	$("a[title]").tooltip({
		showURL: false
	   });

	$("tr.telEntry a").click(function() {
		return false;
	});

	$("tr.telEntry").mouseup(function() {
		location.assign($(this).find("td:first a").attr("href"));
      
	   }).mouseover(function() {
         $(this).addClass("pointer");
	   }).mouseout(function() {
         $(this).removeClass("pointer");
	   });
}

// To send the input value to the proxy script for use in eg the Keywords
// field, simply add 'Keywords: getInputValue' to the list of extraParams
// in the call to autocomplete() below.
var whatVal;
var whereVal;
function getWhatValue() {
	whereVal = $("#where").val();
	return $("#what").val();
}

function getWhereValue() {
	whatVal = $("#what").val();
	return $("#where").val();
}

function getLocVal(){
	var value = ($("#loc").length > 0) ? $("#loc").val() : '';
	return value;
}

function getLoc2Val(){
	var value = ($("#loc2").length > 0) ? $("#loc2").val() : '';
	return value;
}

function getCatVal(){
	var value = ($("#cat").length > 0) ? $("#cat").val() : '';
	return value;
}


function clearFieldSubmit(fieldId) {
	fieldId && $("#" + fieldId).val("");
	$("div#content form").submit();
}

function formatWhatFooter() {
	return "<div><a href='javascript:void(0);' onmousedown='moreHitsWhat();'>" + $("#more").val() + "&hellip;</a></div>";
}

function formatWhereFooter() {
	return "<div><a href='javascript:void(0);' onmousedown='moreHitsWhere();'>" + $("#more").val() + "&hellip;</a></div>";
}

function moreHitsWhat() {
	$("#what").setOptions({
		max: 60,
		formatFooter: function() {
			return "<div><a href='javascript:void(0);' onmousedown='fewerHitsWhat();'>" + $("#fewer").val() + "&hellip;</a></div>"; }
		});
	$("#what").blur();
	timeout = setTimeout(triggerWhat, 250);
}

function fewerHitsWhat() {
	$("#what").setOptions({
		max: 30,
		formatFooter: formatWhatFooter
		});
	$("#what").blur();
	timeout = setTimeout(triggerWhat, 250);
}

function moreHitsWhere() {
	$("#where").setOptions({
		max: 60,
		formatFooter: function() {
			return "<div><a href='javascript:void(0);' onmousedown='fewerHitsWhere();'>" + $("#fewer").val() + "&hellip;</a></div>"; }
		});
	$("#where").blur();
	timeout = setTimeout(triggerWhere, 250);
}

function fewerHitsWhere() {
	$("#where").setOptions({
		max: 30,
		formatFooter: formatWhereFooter
		});
	$("#where").blur();
	timeout = setTimeout(triggerWhere, 250);
}


function triggerWhat() {
	$("#what").triggerSearch($("#what").val());
}

function triggerWhere() {
	$("#where").triggerSearch($("#where").val());
}

