// weinlagen.js

//TODO: urlPreventCache disablen????

// center of initial screen
var geo_de = {lat: 48.5, lng: 10.15, zoom: 5};
var map; 	// Google map
var sessionid ="";
var configData = {
			hideNavBar: false
		};
var cityIcon = null;
var text = [];
var geocorder;
var menuCreated=false;
var maintain = false;
var overlayTemplate=null; // img for lage overlay
var storage=false; // local storage available
var useHash=false;

var dndWeingutSearch = null, dndWeingutLage = null; // weingut selection nodes

var url_vk ="http://www.verkostungsnotizen.net/vkn_liste.php?Bez=";
var url_ct = "http://www.cellartracker.com/list.asp?Table=Notes&iUserOverride=0&szSearch=";
var url_ws = "http://www.wine-searcher.com/find/";

var empty_store = {"identifier":"id","items":[]};

var polygonOptions = {
	polyShapes: new Array(),
	polyline: null,
	fillColor: "#0000FF",
	opacity: 0.1,  // background color
	lineColor: "#000000",  // black line
	lineWeight: 2,
	lineOpacity: 0.6,
	polygonDepth: "20"
};

// contains all relevant data
var data = {
	landID: "",
	landStore:null,
	display: 0, // 1=Anbaugebiet,2,3,4=Lage 
	anbauID: "",            // Id of currently loaded Anbaugebiet
	anbauStore: null,         // store for Anbaugebiete (and polygons)
	anbauShapes: new Array(), // polygons of all Anbaugebiete
	bereichID: "",
	bereichStore: null,
	bereichShapes: new Array(),
	cityID: "",
	cityStores: new Array(),
	cityStore: null,
	cityMarker: new Array(),
	lageID: "",
	lageStore: null,
	lageShapes: new Array()
}

var landConnectionHandle = null;
var anbauConnectionHandle = null;
var bereichConnectionHandle = null;
var gemeindeConnectionHandle = null;
var lageConnectionHandle = null;
var handleLand=true;
var handleAnbau=true;
var handleBereich=true;
var handleCity=true;
var handleLage=true; 

// TooltipOverlay Constructor
function Tooltip(latlng, text, opt_color) {
  this.latlng_ = latlng;
  this.text_ = text || "Test";
	this.color_ = opt_color || "#888888";
}

// makes initial loads of required entities
function loader() {
	console.log("loader");
	dojo.addOnLoad(function(){initialize()});	
}


/*
 * initialize dojo/maps
 */
function initialize() {
  console.log("init");
	if (GBrowserIsCompatible()) {
		// initially set map size according the size of its parent
		map = new google.maps.Map2(document.getElementById("map_canvas"));
	  map.setCenter(new GLatLng(geo_de.lat, geo_de.lng), geo_de.zoom);
		//map.addControl(new GLargeMapControl());
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GMapTypeControl());
		map.setMapType(G_SATELLITE_MAP);	// Satelitten-Sicht aktivieren	
		map.addMapType(G_PHYSICAL_MAP);		// Gelände-Sicht als Auswahl hinzufuegen
		
		map.addMapType(G_SATELLITE_3D_MAP); // new feature
    map.addControl(new GOverviewMapControl());	// Uebersichtskarte dazuschalten
		map.enableScrollWheelZoom();
		geocoder = new GClientGeocoder();
		
		GEvent.addListener(map, "moveend", function() {
      var center = map.getCenter();
      console.log("LatLng: ",center.toString(),map.getZoom());
    });
		
		/* TooltipOverlay */
		// Constructor is golbal
		Tooltip.prototype = new GOverlay();
		// Creates the DIV representing this rectangle.
		Tooltip.prototype.initialize = function(map) {
			// Create the DIV representing our rectangle
			var div = document.createElement("div");
			div.appendChild(document.createTextNode(this.text_));
			div.style.border = "1px solid " + this.color_;
			div.style.background = "rgb(255, 255, 128)";
			div.style.position = "absolute";
			div.style.padding = "2px";
			div.style.zIndex = 100;

			// attach to same pane as infoWindow (i.e. z-index > polygon, icons etc...)
			map.getPane(G_MAP_FLOAT_PANE).appendChild(div);
			
			this.map_ = map;
			this.div_ = div;
			dojo.fadeOut({node:this.div_, duration:2000}).play();
		}
		// Remove the main DIV from the map pane
		Tooltip.prototype.remove = function() {
		  this.div_.parentNode.removeChild(this.div_);
		}
		// Copy our data to a new Rectangle
		Tooltip.prototype.copy = function() {
		  return new Rectangle(this.bounds_, this.weight_, this.color_,
		                       this.backgroundColor_, this.opacity_);
		}

		// Redraw the rectangle based on the current projection and zoom level
		Tooltip.prototype.redraw = function(force) {
	  // We only need to redraw if the coordinate system has changed
	  if (!force) return;

		  // Calculate the DIV coordinates of two opposite corners of our bounds to
		  // get the size and position of our rectangle
		  var c1 = this.map_.fromLatLngToDivPixel(this.latlng_);

		  // Now position our DIV based on the DIV coordinates of our bounds
		  //this.div_.style.width = "20px";
		  //this.div_.style.height = "10px";
		  this.div_.style.left =  c1.x + "px";
		  this.div_.style.top = c1.y + "px";
		}
		
		// init Icon for Gemeinde
		cityIcon = new GIcon(G_DEFAULT_ICON);
		cityIcon.image = "img/icons/DorfN.png";
		cityIcon.iconSize = new GSize(14, 20);
		cityIcon.shadowSize = new GSize(14, 20);
		cityIcon.iconAnchor = new GPoint(7, 20);
		cityIcon.infoWindowAnchor = new GPoint(7, 7);
		
	} else {
		// browser is not comatible
		dojo.byId("map_canvas").innerHTML =
		"Google Maps konnte nicht initialisiert werden.<br />" +
		"Ihr Browser scheint nicht kompatibel zu sein!";
	}
	//connect a listener to each splitter: resize
	dojo.query("#searchPane_splitter").forEach(function(splitter) {
	  dojo.connect(splitter, "onmouseup", resizeMap);
	});
	
	// localStorage available?
	if (typeof(localStorage) == 'undefined' || typeof(localStorage) == 'unknown') {
		storage = false;
	} else {
		storage = true;
	}
	// locale
	var langu = navigator.language;
	text = load_texts();
	if (text.anbaugebiet==undefined){
		text.anbaugebiet="Anbaugebiet";
	}
	dojo.byId("pane_search_res_header").innerHTML = readFreitextHilfe();
	
	console.log("texte",text,"langu",langu);
	dojo.addOnLoad(initDijit);
}

function initDijit(){
	console.log("initDijit");
	if (sessionid != "") {
		dojo.cookie("sessionid",sessionid);
		dijit.byId("login").set('label',"Abmelden");
	} else {
		sessionid = dojo.cookie('sessionid');
		if(sessionid==undefined){
			sessionid="";
		} else {
			if (sessionid!="") { dijit.byId("login").set('label',"Abmelden"); }
		}
	}
	var activity=loadListeActivities(sessionid);
	setupMenu(activity);
	displayMenu(activity);
	// search string => .../?for=????
	getForSearchString(location.search);
	var ls = "";
	if (location.search != "") {
		ls = location.search;
		//location.hash=location.search;
		//location.search="";
	} else {
		ls = "&"+dojo.hash();
	}
	setupLand();
	var showAllAnbau=false;
	var id = get_object_id(ls);
	// 1=Anbaugebiet,2,3,4=Lage
	if(id.found) {
		switch (id.display) {
			case 0: // Land
				showAllAnbau=true;
				setupAnbau(showAllAnbau);
				if (id.id!="") { loadReverseLand(id.id); }
				break;
			case 1: // Anbaugebiet
				setupAnbau(showAllAnbau);
				if (id.id != "") { loadReverseAnbau(id.id); }
				break;
			case 2: // Bereich
				setupAnbau(showAllAnbau);
				if (id.id != "") { load_reverse_bereich(id.id); }
				break;
			case 3: // City
				setupAnbau(showAllAnbau);
				if (id.id != "") { load_reverse_city(id.id); }
				break;
			case 4: // Lage
				setupAnbau(showAllAnbau);
				if (id.id != "") { load_reverse_lage(id.id); }
				break;
			default:
				console.error("default not implemented");
				break;
		}
	} else {
		showAllAnbau=true;
		setupAnbau(showAllAnbau);		
	}
	connectHandles();
	disableMenu();
	checkAccContainer();
	// switch: loading to display bordercontainer
	dojo.style(dojo.byId("loading"), "display", "none");
	dojo.style(dojo.byId("main"), "visibility", "visible");
	console.log("initialize end");
	hideMessages("messages","Initalisieren");
	if (dojo.fromJson(dojo.cookie("configData"))) {
		configData = dojo.fromJson(dojo.cookie("configData"));
	}
	if(configData.hideNavBar){
		hideNavBereich();
	}
	if (parent.frames.location.href==location.href){
		useHash=true;
	}
}

function showNavBereich() {
	var c = map.getCenter();
	dijit.byId("borderContainer").addChild(dijit.byId("searchPane"));
	map.checkResize();
	map.setCenter(c);
	configData.hideNavBar = false;
	dojo.cookie("configData", dojo.toJson(configData), {expires: 100});
	display();
}
function hideNavBereich() {
	var c = map.getCenter();
	dijit.byId("borderContainer").removeChild(dijit.byId("searchPane"));
	map.checkResize();
	map.setCenter(c);
	configData.hideNavBar = true;
	dojo.cookie("configData", dojo.toJson(configData), {expires: 100});
	display();
}
// trigger resize event for map
function resizeMap() {
	map.checkResize();
}

/*
 *********************** Setup Land ******************************************** 
 */
function setupLand(){
	data.landStore = new dojo.data.ItemFileReadStore({
		url:"../cgi-bin/ajax/load_liste_land.cgi"
	});
	var landSelect = new dijit.form.ComboBox({
		id:"comboLand",
		store:data.landStore,
		searchAttr:"bezeichnung"
	},"comboLand");
	// read all items...
	data.landStore.fetch({
		query:{id:"*"},
		onItem:function(item) {
			//console.log('Land: ',item);
		}
	});
}

function handleLandChanged(evt) {
	console.log("landCombo changed - Name",evt);
	if(evt == undefined) {
		return; // workaround dojo 1.7
	}
	if (handleLand==false) {
		handleLand=true;
		return;
	}
	dijit.byId("comboAnbau").set('value',"");
	dijit.byId("comboLage").set('value',"");
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboBereich").set('value',"");
	data.anbauID="";
	data.bereichID="";
	data.cityID="";
	data.lageID="";
	if (evt == "") {
		dijit.byId("comboAnbau").query.land = /.*/;
		data.landID="";
		dijit.byId("comboAnbau").set('disabled', true);
	} else {
		var id = data.landStore.getValue(dijit.byId("comboLand").item,"id");
		dijit.byId("comboAnbau").query.land = id;
		data.landID=id;
		dijit.byId("comboAnbau").set('disabled', false);
	}
	data.display=0;
	display();
}

function displayLand(){
	data.display=0;
	display();
}

function setComboLand(id) {
	data.landStore.fetchItemByIdentity({
		identity:id,
		onItem: function(item){
			data.landID=id;
			dijit.byId("comboLand").set('value',data.landStore.getValue(item,"bezeichnung"));
			dijit.byId("comboLand").item=item;
		}
	});
}

function selectLand(id){
	map.closeInfoWindow();
	if(id==data.landID) {
		displayLand();
	} else {
		setComboLand(id);
	}
}

function setLand() {
	dijit.byId("comboLage").set('value',"");
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboBereich").set('value',"");
	dijit.byId("comboAnbau").set('value',"");
	disableAllCombo();
	enableAllCombo();
}

/*
 *********************** Setup Anbau *******************************************
 */
function setupAnbau(showAllAnbau){
	data.anbauStore = new dojo.data.ItemFileWriteStore({
		url: "../cgi-bin/ajax/load_liste_anbaugebiete.cgi?sessionid="+sessionid,
		urlPreventCache:true});
	createAnbauShapes(showAllAnbau);
	var anbauSelect = new dijit.form.ComboBox({
											id: "comboAnbau",
											store: data.anbauStore,
											searchAttr: "bezeichnung"
										}, "comboAnbau");
	dijit.byId("comboAnbau").set('disabled', true);
	anbauSelect.focus();
}

function handleAnbauChanged(evt) {
	console.log("anbauCombo changed -  Name:",evt);
	if(evt == undefined) {
		return; // workaround dojo 1.7
	}
	if (handleAnbau==false){
		handleAnbau=true;
		return;
	}
	// init in this sequence: lage, gemeinde, bereich
	dijit.byId("comboLage").set('value',"");
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboBereich").set('value',"");
	data.bereichID="";
	data.cityID="";
	data.lageID="";
	if (evt == "") {
		// nothing selected
		data.anbauID="";
		data.display = 0;
		disableBereich();
		display();
	} else {
		// new Anbaugebiet selected: current item of combo box
		data.anbauID = data.anbauStore.getValue(dijit.byId("comboAnbau").item, "id");
		data.display = 1;
		enableBereich(data.anbauID,true);
		createAnbauCityMarker();
	}
	enableAllMenu();
}

function displayAnbau(){
	if (data.anbauID != "") {
		createAnbauCityMarker();
		data.display=1;
	} else {
		data.display=0;
	}
	display();
}

function createAnbauShapes(showAllAnbau) {
	data.anbauShapes = [];
	// callbacks for following fetch
	var onAnbauComplete = function(items, request) {
		if (showAllAnbau) { displayAnbau(); }
	}
	var onAnbauItem = function(item, request) {
		// create polyshape from polygons data
		var polygons = data.anbauStore.getValues(item, "polygons");
		var id = data.anbauStore.getValue(item, "id");
		var land = data.anbauStore.getValue(item,"land");
		var polyShapes = getPolyShapes (id, polygons);
		dojo.forEach(polyShapes, function(thisShape){
			GEvent.addListener(thisShape, "mouseout", function() {
				thisShape.setFillStyle({opacity:polygonOptions.opacity});
				thisShape.setStrokeStyle({color: polygonOptions.lineColor});
			});
			GEvent.addListener(thisShape, "mouseover", function() {
				thisShape.setFillStyle({opacity: 0.0});
				thisShape.setStrokeStyle({color: "red"});
				map.addOverlay(new Tooltip(
					this.getBounds().getCenter(),
					data.anbauStore.getValues(item,"bezeichnung")
				));
			});
			GEvent.addListener(thisShape, "click", function(latlng) {
				showAnbauHTML(latlng, id);
			});
		});
		var anbauShapes = {
			id: id,
			land: land,
			polyShapes: polyShapes
		}
		data.anbauShapes.push(anbauShapes);
	}
	var onAnbauError = function(error, request) {
		console.log("Fehler beim Laden der Anbaugebiete" + error);
	}
	data.anbauStore.fetch({
		onComplete: onAnbauComplete,
		onItem: onAnbauItem,
		onError: onAnbauError
	});
}

function showAnbauHTML(latlng, id) {
	var f = function(item){
		var id = data.anbauStore.getValue(item, "id");
		var bezeichnung = data.anbauStore.getValue(item, "bezeichnung");
		if (data.anbauID == "") {
			html =
				'<div class="info"><a href=javascript:selectAnbau('+id+')>'+
				bezeichnung.bold().big()+'</a><br />';
		} else {
			html = '<div class="info">'+bezeichnung.bold().big()+'<br />';
		}
		html = html + "Fläche: <b>" + data.anbauStore.getValue(item, "flaeche") +
				" ha </b><br />";
		html = html + "Rebsorten: <b>" + data.anbauStore.getValue(item, "rebsorten") +
				"</b><br />";
		var bundesland = data.anbauStore.getValue(item, "bundesland");
		if (bundesland != "") {
			html = html + "Bundesland: <b>" + bundesland + "</b><br />";			
		}
		var infos = data.anbauStore.getValue(item, "infos");
		if (infos != "" && infos != '<br _moz_editor_bogus_node="TRUE" />') {
			html = html + "<hr />";
			var infos = infos.replace(/<a /g, '<a target="_blank"');
			dojo.trim(infos);
			html = html + "<div id='ainfo' style='font-family:Arial;border-width:0px'>"+infos+"</div>";
		}
		html = html + '</div>';
		if (data.anbauID != "") {
			html = html + "<div class='info_hnav'>";
			html = html + "<div class='info_lnav'><a href='javascript:showOverviewLand()'>Übersicht Land</a></div>";
			html = html + "<div class='info_rnav'><a href='javascript:showBereiche()'>Anzeigen Bereiche</a></div>";
			html = html + "</div>";
		} else {
			if(data.landID!="") {
				html = html + "<div class='info_hnav'>";
				html = html + '<a href="javascript:showOverview()">Übersicht</a>';
				html = html + "</div>";				
			}
		}
		map.openInfoWindowHtml(latlng, html);
	}
	data.anbauStore.fetchItemByIdentity({
		identity: id,
		onItem : f
	});
}

function showOverview(){
	showOverviewLand();
	dijit.byId("comboLand").set('value',"");	
	disableAllCombo();
	enableAllCombo();
}

function showOverviewLand() {
	map.closeInfoWindow();
	dijit.byId("comboLage").set('value',"");
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboBereich").set('value',"");
	dijit.byId("comboAnbau").set('value',"");
	display();
}

function selectAnbau(anbauID) {
	map.closeInfoWindow();
	createAnbauCityMarker();  //???
	if (anbauID == data.anbauID) {
		displayAnbau();
	} else {
		data.anbauStore.fetchItemByIdentity({
			identity: anbauID,
			onItem : function(item){
				data.anbauID = anbauID;
				data.display = 1;
				var landID=data.anbauStore.getValue(item, "land");
				handleLand=false;
				setComboLand(landID);
				dijit.byId("comboAnbau").query.land = landID;
				dijit.byId("comboAnbau").set('value',data.anbauStore.getValue(item, "bezeichnung"));
				dijit.byId("comboAnbau").item = item;
			}
		});
	}
}

function getAnbauAttr(id,attrName) {
	var thisAttr="";
	data.anbauStore.fetchItemByIdentity({
		identity: id,
		onItem : function(anbauItem){
			thisAttr = data.anbauStore.getValue(anbauItem,attrName);
		}
	});
	return thisAttr;
}


/*
 *********************** Setup Bereich *****************************************
 */
function enableBereich(anbauID,doDisplay) {
	data.bereichStore = new dojo.data.ItemFileWriteStore({
		url: "../cgi-bin/ajax/load_liste_bereiche.cgi?dojo=true&all=true&anbau_id="+anbauID,
		urlPreventCache:true
	});
	loadCitiesForAnbau();	
	dijit.byId("comboBereich").set("store", data.bereichStore);	
	dijit.byId("comboBereich").set("searchAttr", "name");
	dijit.byId("comboBereich").set("disabled", false);
	var thisSize=0;
	data.bereichShapes=new Array();
	// set bereich if only one exists for this anbaugebiet
	data.bereichStore.fetch({
		query: {},
		onComplete: function(items) {
			if(doDisplay){
				display(); // finally
			}
		},
		onBegin: function(size){
			thisSize=size;
			if (thisSize > 1) {
				dijit.byId("comboBereich").set('value',"");
			}
		},
		onItem: function(item) {
			createBereichShapes(item);
			if (thisSize == 1) {  // SPACE = 1
				//data.bereichID = data.bereichStore.getValue(item,"id");
				dijit.byId("comboBereich").set('value',data.bereichStore.getValue(item,"name"));
				dijit.byId("comboBereich").item = item;
				dijit.byId("comboBereich").set("disabled", true);
				data.bereichID=data.bereichStore.getValue(item,"id");
			}
		}
	});
}

function disableBereich(){
	data.bereichStore = empty_store;
	data.bereichID = "";
	dijit.byId("comboBereich").set("disabled", true);
}

function handleBereichChanged(evt) {
	console.log("bereichCombo changed -  Name:",evt);
		if(evt == undefined) {
		return; // workaround dojo 1.7
	}
	if(handleBereich==false){
		handleBereich=true;
		return;
	}
	var item = dijit.byId("comboBereich").item;
	// init in this sequence
	dijit.byId("comboLage").set('value',"");
	dijit.byId("comboCity").set('value',"");
	data.bereichShapes = new Array();
	if (evt == "") {
		// nothing selected
		data.bereichID = "";
		disableCity();
		data.display = 1;
	} else {
		// new Bereich selected: current item of combo box
		data.bereichID = data.bereichStore.getValue(item, "id");
		data.display = 2;
		createBereichShapes(item);
		enableCity(data.bereichID,true);
	}
	enableAllMenu();
}

function labelDisplayBereich(){
	if(data.bereichID!="") {
		displayBereich();
	}
}

function displayBereich(){
	if (data.bereichID != "") {
		data.display=2;
		createBereichCityMarker(data.bereichID);
	} else {
		data.display=1;
	}
	display();
}

function showBereiche() {
	data.bereichShapes = new Array();
	map.closeInfoWindow();
	data.bereichStore.fetch({
		onComplete: function(){
			dojo.forEach(data.bereichShapes, function(shapes){
				dojo.forEach(shapes.polyShapes, function(thisShape) {
				  drawShape(thisShape);
				});
			});
			dojo.forEach(data.cityMarker, function(thisMarker) {
				map.addOverlay(thisMarker);
			});
		},
		onItem: createBereichShapes,
		onBegin: function(size){
			if(size>0){
				map.clearOverlays();
			}
		}
	});
}

function createBereicheShapes(){
	data.bereichShapes = new Array();
	data.bereichStore.fetch({
		onItem: createBereichShapes
	});
}

function createBereichShapes(item) {
	var polygons = data.bereichStore.getValues(item, "polygons");
	var id = data.bereichStore.getValues(item, "id");
	var name = data.bereichStore.getValue(item,"name");
	var polyShapes = getPolyShapes (id, polygons);
	dojo.forEach(polyShapes, function(thisShape){
		GEvent.addListener(thisShape, "mouseout", function() {
			thisShape.setFillStyle({opacity:polygonOptions.opacity});
			thisShape.setStrokeStyle({color: polygonOptions.lineColor});
		});
		GEvent.addListener(thisShape, "mouseover", function() {
			thisShape.setFillStyle({opacity: 0.0});
			thisShape.setStrokeStyle({color: "red"});
			map.addOverlay(new Tooltip(
				this.getBounds().getCenter(), name)
			);
		});
		GEvent.addListener(thisShape, "click", function(latlng) {
			showBereichHTML(latlng, id);
		});
	});
	var bereichShapes = {
		id: id,
		polyShapes: polyShapes
	}
	data.bereichShapes.push(bereichShapes);
}

function showBereichHTML(latlng, id) {
	data.bereichStore.fetchItemByIdentity({
		identity: id,
		onItem : function(item){
			var html = '<div class="info">' +
		    '<a href=javascript:selectBereich('+id+');>' +
				data.bereichStore.getValue(item, "name").bold().big() + '</a><br />';
			var anbauName = "Name ermitteln";
			data.anbauStore.fetchItemByIdentity({
				identity: data.anbauID,
				onItem : function(anbauItem) {
					anbauName = data.anbauStore.getValue(anbauItem, "bezeichnung");
				}
			});
			html = html + "Anbaugebiet: <b><a href='javascript:displayAnbau()'>"+anbauName+"</a></b><br />";
			var landName="Land";
			data.landStore.fetchItemByIdentity({
				identity:data.landID,
				onItem: function(item){
					landName=data.landStore.getValue(item,"bezeichnung");
				}
			});
			html = html + "Land: <b><a href='javaScript:setLand()'>"+landName+"<a></b>";
			var flaeche = data.bereichStore.getValue(item, "flaeche");
			if (flaeche !="") {
				html = html + "Fläche: <b>"+flaeche+" ha </b><br />";
			}
			var rebsorten = data.bereichStore.getValue(item, "rebsorten");
			if (rebsorten !="") {
				html = html + "Rebsorten: <b>"+rebsorten+"</b><br />";
			}
			var bundesland = data.bereichStore.getValue(item, "bundesland");
			if (bundesland != "") {
				html = html + "Bundesland: <b>"+bundesland+"</b><br />";
			}
			var infos = data.bereichStore.getValue(item, "infos");
			if (infos != "") {
				html = html + "<hr />";
				var infos = infos.replace(/<a /g, '<a target="_blank"');
				dojo.trim(infos);
				html = html + "<div id='ainfo' style='font-family:Arial;border-width:0px'>"+infos+"</div>";
			}
			html = html + "</div>";
			map.openInfoWindowHtml(latlng, html);
		}
	});
}

function selectBereich(bereichID) {
	map.closeInfoWindow();	
	if (bereichID == data.bereichID) {
		displayBereich();
	} else {
		//data.bereichID = bereichID;  // tiggers handleBereichChange
		data.display = 2;
		data.bereichStore.fetchItemByIdentity({
			identity: bereichID,
			onItem : function(item){
				dijit.byId("comboBereich").set('value',data.bereichStore.getValue(item, "name"));
				dijit.byId("comboBereich").item = item;
			}
		});
	}
}

function getBereichAttr(id,attrName) {
	var thisAttr = "";
	data.bereichStore.fetchItemByIdentity({
		identity: id,
		onItem: function(item) {
			thisAttr = data.bereichStore.getValue(item, attrName);
		}
	});
	return thisAttr;
}

/*
 *********************** Setup City ********************************************
 */

function loadCitiesForAnbau() {
	var url = "../cgi-bin/ajax/load_liste_gemeinden.cgi?dojo=true&all=true&anbau_id="+data.anbauID;
	dojo.xhrGet(
	{
		url: url,
	  handleAs: "json",
		preventCache: true,
		sync: true, 
		load:	function(response, ioArgs) {
						console.log("Gemeinden geladen");
						createCityStores(response);
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Gemeindedaten für Anbaugebiet", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}	
	}
	);
}

function createCityStores(cityStoreDataArray,doDisplay) {
	data.cityMarker = new Array();
	data.cityStores = new Array();
	dojo.forEach(cityStoreDataArray, function(cityStoreData){
		var store = new dojo.data.ItemFileWriteStore({
			data:cityStoreData
		});
		store.fetch({
			onComplete: function(items) {
				console.log("done: CreateCityStores",items.length);
			}
		});
		var cityStore = {};
		cityStore.bereichID = cityStoreData.bereich;
		cityStore.store = store;
		data.cityStores.push(cityStore);
	});
}

function createAnbauCityMarker(){
	data.cityMarker = new Array();
	dojo.forEach(data.cityStores,function(cityStore){
		createCityMarker(cityStore.bereichID,cityStore.store);
	})
}

function createBereichCityMarker(bereichID){
	data.cityMarker = new Array();
	dojo.forEach(data.cityStores,function(cityStore){
		if (cityStore.bereichID == bereichID) {
			createCityMarker(cityStore.bereichID,cityStore.store);
		}
	});
}

function enableCity(bereichID,doDisplay) {
	dojo.forEach(data.cityStores,function(thisStore){
		if (thisStore.bereichID == bereichID) {
			data.cityStore = thisStore.store;
		}
	});
	data.cityMarker = new Array();
	createCityMarker(bereichID,data.cityStore);
	dijit.byId("comboCity").set("store", data.cityStore);
	dijit.byId("comboCity").set("searchAttr", "name");
	dijit.byId("comboCity").set("disabled", false);
	var thisSize=0;
	// set bereich if only one exists for this anbaugebiet
	data.cityStore.fetch({
		query: {},
		onComplete: function(items) {
				if(doDisplay){
					display();  // finally
				}
			},
		onBegin: function(size) {
				thisSize = size;
				if (thisSize > 1 && doDisplay==true) {
					dijit.byId("comboCity").set('value',"");
				}
			},
		onItem: function(item) {
			if (thisSize == 1) {  // SPACE = 1
				//data.cityID=data.cityStore(item,"id");
				dijit.byId("comboCity").set('value',data.cityStore.getValue(item,"name"));
				dijit.byId("comboCity").item = item;
				dijit.byId("comboCity").set("disabled", true);
				data.cityID=data.cityStore.getValue(item,"id");
			}
		}
	});
}

function disableCity() {
	data.cityStore = empty_store;
	data.cityID = "";
	dijit.byId("comboCity").set("disabled", true);
}

function createCityMarker(bereichID,store) {
	if (store == null) {
		console.log("create CityMarker: store == null");
		return;
	}
	store.fetch({
		onItem: function(item, request) {
			var markerOptions = { icon:cityIcon, title: store.getValue(item,"name") };
			var lat = store.getValue(item,"geo_lat");
			var lng = store.getValue(item,"geo_lng");
			var id = store.getValue(item,"id");
			var xyPoint = new GLatLng(lat, lng);
			var cityMarker = new GMarker(xyPoint, markerOptions);
			//dojo.mixin(marker, { gemeindeID: store.getValue(item,"id") })
			GEvent.addListener(cityMarker, "click", function() {
				cityMarker.openInfoWindowHtml(htmlGemeinde(bereichID,store,item));
			});
			GEvent.addListener(cityMarker, "dblclick", function() {	
				selectCity(bereichID,id);
			});
			data.cityMarker.push(cityMarker);
		}
	});
}

function htmlGemeinde(bereichID,cityStore,cityItem) {
	var html = "";
	if (data.anbauID == ""){ return "anbauID initial"; }
	data.anbauStore.fetchItemByIdentity({
		identity: data.anbauID,
		onItem : function(anbauItem){
			var bezeichnung = data.anbauStore.getValue(anbauItem, "bezeichnung");
			var id = cityStore.getValue(cityItem, "id");
			var name = cityStore.getValue(cityItem, "name");
			data.bereichStore.fetchItemByIdentity({
				identity: bereichID,
				onItem: function(item) {
					var bereichName = data.bereichStore.getValue(item, "name");
					html = '<div class="info"><a href=javascript:selectCity('+bereichID+','+id+'); >' +
						name.bold().big() + "</a><br />";
					html = html + "Anbaugebiet: <a href='javascript:selectAnbau("+data.anbauID+");'>"+bezeichnung+"</a> <br />";
					html = html + "Bereich: <a href='javascript:selectBereich("+bereichID+");'>"+bereichName+"</a> ";
					html = html + '</div>';
				}
			});
		}
	});
	return html;
}

function handleGemeindeChanged(evt) {
	console.log("bereichGemeinde changed -  Name:",evt);
		if(evt == undefined) {
		return; // workaround dojo 1.7
	}
	if(handleCity==false){
		handleCity=true;
		return;
	}
	var item = dijit.byId("comboCity").item;
	dijit.byId("comboLage").set('value',"");
	if (evt == "") {
		// nothing selected
		data.cityID = "";
		data.display = 2;
		disableLage();
	} else {
		// new City selected: current item of combo box
		data.cityID = data.cityStore.getValue(item, "id");
		data.display = 3;
		data.lageShapes=new Array();
		enableLage(data.cityID,true);
		if(data.cityStore.getValue(item,"geo_zoom")==0){
			data.display=2;
		}
	}
	enableAllMenu();
}

function selectComboBereichCity(bereichID,cityID){
	if(data.bereichID!=bereichID){
		data.bereichStore.fetchItemByIdentity({
			identity: bereichID,
			onItem: function(item,request){
				handleBereich=false;//don't handle next change
				dijit.byId("comboBereich").set('value',data.bereichStore.getValue(item, "name"));
				dijit.byId("comboBereich").item = item;
				enableCity(bereichID,false);
				data.bereichID = bereichID;
				selectComboCity(cityID);
			}
		});
	} else {
		selectComboCity(cityID);
	}
}

function selectComboCity(cityID){
	data.cityID = cityID;
	data.cityStore.fetchItemByIdentity({
		identity: cityID,
		onItem: function(item,request){
			dijit.byId("comboCity").set('value',data.cityStore.getValue(item, "name"));
			dijit.byId("comboCity").item = item;
			displayCity();
		}
	});		
}

function selectCity(bereichID,cityID){
	map.closeInfoWindow();
	if (cityID == data.cityID) {
		displayCity();
	} else {
		selectComboBereichCity(bereichID, cityID);
	}
}

function labelDisplayCity(){
	if (data.cityID!="") {
		displayCity();
	}
}

function displayCity(){
    if (data.cityID != "") {
        data.display=3;
    } else {
        data.display=2;
    }
    display();
}

function getCityAttr(id,attrName) {
	var thisAttr="";
	data.cityStore.fetchItemByIdentity({
		identity: id,
		onItem : function(thisItem){
			thisAttr = data.cityStore.getValue(thisItem,attrName);
		}
	});
	return thisAttr;
}

function setLageStore(cityID) {
	data.lageStore=null;
	data.lageStore = new dojo.data.ItemFileWriteStore({
     url: "../cgi-bin/ajax/load_liste_lagen.cgi?dojo=true&all=true&gemeinde_id="+cityID,
     urlPreventCache:true
  });
	console.log("data.lageStores",data.lageStore);
}

/*
 *********************** Setup Lage ********************************************
 */

function enableLage(cityID,doDisplay) {
	data.lageID="";
	setLageStore(cityID);
	dijit.byId("comboLage").set("store", data.lageStore);
	dijit.byId("comboLage").set("searchAttr", "name");
	dijit.byId("comboLage").set("disabled", false);
	var thisSize=0;
	// set bereich if only one exists for this anbaugebiet
	data.lageStore.fetch({
		//query: {},
		onComplete: function(items) {
				if(doDisplay){
					display();
				}
			},
		onBegin: function(size) {
				thisSize = size;
				if (thisSize > 1) {
					dijit.byId("comboLage").set('value',"");
				}
			},
		onItem: function(item){
			createLageShapes(item);
			if (thisSize == 1) {
				//data.lageID = data.lageStore.getValue(item,"id");
				dijit.byId("comboLage").set('value',data.lageStore.getValue(item,"name"));
				dijit.byId("comboLage").item = item;
				dijit.byId("comboLage").set("disabled", true);
				data.lageID=data.lageStore.getValue(item,"id");
				data.display=4;
			}
		}
	});
}

function disableLage() {
	data.lageStore = empty_store;
	data.lageID = "";
	dijit.byId("comboLage").set("disabled", true);
}

function handleLageChanged(evt) {
	console.log("lageCombo changed -  Name:",evt);
		if(evt == undefined) {
		return; // workaround dojo 1.7
	}
	if(handleLage==false){
		handleLage=true;
		return;
	}
	var item = dijit.byId("comboLage").item;
	if (evt == "") {
		// nothing selected == intialize
		data.lageID = "";
		data.display=3;
	} else {
		// new Lage selected: current item of combo box
		data.display=4;
		data.lageID=data.lageStore.getValue(item,"id");
	}
	// display according to new status
	display();
	enableAllMenu();
}

function createLagenShapes(){
	data.lageShapes=new Array();
	data.lageStore.fetch({
		query: {},
		onItem: function(item){
			createLageShapes(item);
		}
	});
}

function createLageShapes(item) {
	var name = data.lageStore.getValue(item,"name");
	var id = data.lageStore.getValue(item,"id");
	var polygons = data.lageStore.getValues(item, "polygons");
	var polyShapes = getPolyShapes (id, polygons);
	dojo.forEach(polyShapes, function(thisShape){
		GEvent.addListener(thisShape, "mouseout", function() {
			thisShape.setFillStyle({opacity:polygonOptions.opacity});
			thisShape.setStrokeStyle({color: polygonOptions.lineColor});
		});
		GEvent.addListener(thisShape, "mouseover", function() {
			thisShape.setFillStyle({opacity: 0.0});
			thisShape.setStrokeStyle({color: "red"});
			map.addOverlay(new Tooltip(
				this.getBounds().getCenter(), name)
			);
		});
		GEvent.addListener(thisShape, "click", function(latlng) {
			showLageHTML(latlng, id);
		});
	});
	var lageShapes = {
		id: id,
		polyShapes: polyShapes
	}
	data.lageShapes.push(lageShapes);
}

function showLageHTML(latlng,id){
	data.lageStore.fetchItemByIdentity({
		identity: id,
		onItem : function(item){
			var html = "";
			var lage_lang = data.lageStore.getValue(item, "lage_lang");
			
			if (data.display == 4 ) { // lage
				var fl = 0.0;
				var einheit = 'º';
				var neigungEinheit = data.lageStore.getValue(item, "neigungEinheit");
				if (neigungEinheit == 'P') {
					einheit = ' %';
				}
				var neigung = data.lageStore.getValue(item, "neigung");
				var winzer = data.lageStore.getValues(item, "winzer");
				var weingut = createWeingutString(winzer);
				var neig = dojo.number.format( neigung, {pattern: '#0.##',max:999});
				var teile = lage_lang.split(' ');
				var lageName = '<a href=javascript:displayCity();>'+teile[0]+'</a> ';
				var len = teile.length;
				var i = 1;
				while ( i < len ) {
					lageName = lageName.concat(teile[i]);
					i++;
				}
				html = html + '<div class="bk_image">';
				html = html + '<a href=javascript:selectLage('+id+')>'+lageName.bold().big()+'</a>';
				html = html + ' <a style="text-decoration:none" href="javaScript:showLinkDialog();"><img src="img/icons/link.png" alt="link" border="0" >  </a><br/>';
				if (data.lageStore.getValue(item, "flaeche")!="0") {
					html = html + 'Fläche: <b>'+ data.lageStore.getValue(item, "flaeche")+ ' ha</b><br />';
				}
				if (data.lageStore.getValue(item, "rebsorten")!="") {
					html = html + 'Rebsorten: <b>'+data.lageStore.getValue(item, "rebsorten")+'</b><br />';
				}
				if (data.lageStore.getValue(item, "ausrichtung")!="") {
					html = html + 'Ausrichtung: <b>'+data.lageStore.getValue(item, "ausrichtung")+'</b><br />';
				}
				if (neig!="0") {
					html = html + 'Neigung: <b>'+neig+einheit+'</b><br />';
				}
				if (data.lageStore.getValue(item, "boden")!="") {
					html = html + 'Boden: <b>'+data.lageStore.getValue(item, "boden")+'</b><br />';
				}
				if (weingut!="") {
					html = html + 'Erzeuger: <b>'+weingut+'</b><br />';
				}
				html = html + 'Suche in: <br />';
				html = html + '<a target="_blank" href="';
				html = html + url_vk + escape(lage_lang);
				html = html + '">verkostungsnotizen.net</a><br />';
				html = html + '<a target="_blank" href="';
				html = html + url_ct + escape(lage_lang) ;
				html = html + '">cellartracker.com</a>';
				html = html + '<br /><a target="_blank" href="';
				html = html + url_ws;
				// add name lang with "+"
				var name = teile[0];;
				var i = 1;
				while ( i < len ) {
					name = name + "+";
					name = name.concat(teile[i]);
					i++;
				}
				html = html + escape(name);
				html = html + '">wine-searcher.com</a><br />';
				
				if (data.lageStore.getValue(item, "infos") != "") {
					html = html + "<hr />";
					// add target attrubute to open in new window or tab
					var infos = data.lageStore.getValue(item, "infos").replace(/<a /g, '<a target="_blank"');
					dojo.trim(infos);
					html = html + "<div id='ainfo' style='font-family:Arial;border-width:0px'>"+infos + "</div>";
				}
				html = html + "</div>";
			} else { // city
				html = html + '<div class="bk_image">';
				html = html + '<a href=javascript:selectLage('+id+')>'+lage_lang.bold().big()+'</a><br />';
				var anbauName=getAnbauAttr(data.anbauID,"bezeichnung");
				var bereichName=getBereichAttr(data.bereichID,"name");
				var cityName=getCityAttr(data.cityID,"name");
				html = html +'Anbaugebiet: <a href=javascript:selectAnbau('+data.anbauID+');>'+anbauName+'</a><br />';
				html = html +'Bereich: <a href=javascript:displayBereich();>'+bereichName+'</a><br />';
				html = html +'Gemeinde: <a href=javascript:displayCity();>'+ cityName+'</a>';
				html = html + "</div>";
			}		
			map.openInfoWindowHtml(latlng, html);
		}
	});
}

function displayLage(){
	if (data.lageID != ""){
		data.display=4;
		display();
	}
}

function setComboLage(lageID){
	data.lageID = lageID;
	data.lageStore.fetchItemByIdentity({
		identity: lageID,
		onItem: function(item,request){
			dijit.byId("comboLage").set('value',data.lageStore.getValue(item, "name"));
			dijit.byId("comboLage").item = item;
			displayLage();
		}
	});
}

function selectLage(lageID){
	map.closeInfoWindow();
	if (lageID == data.lageID){
		displayLage();
	} else {
		setComboLage(lageID);
	}
}

/*
 ************************ Erzeuger **********************************************
 */
function createWeingutString(winzerArray){
	var weingut="";
	var i=0;
	dojo.forEach(winzerArray,function(winzer){
		var name = "";
		if (winzer[2] != "") {
			name = '<a target="_blank" href="' + winzer[2] + '">' + winzer[1] + '</a>';	
		} else {
			name = winzer[1];
		}
		if (i==0) {
			weingut = name;	
		} else {
			weingut = weingut + ", " + name;
		}
		i++;
	});
	return weingut;
}

function createWeingutDnDList(winzerArray){
	var result=new Array();
	dojo.forEach(winzerArray,function(winzer){
		var s = {id:0, name: ""};
		s.name =  winzer[1];
		s.id =  winzer[0];
		result.push(s);
	});
	return result;
}

function getWeingutIDs(store,item){
	var weingutIDs = new Array();
	var winzerArray = store.getValues(item, "winzer");
	dojo.forEach(winzerArray,function(winzer){
		weingutIDs.push(winzer[0]);
	});
	return dojo.toJson(weingutIDs);
}
	
/*
 *********************** Miscellaneous *****************************************
 */

function drawShape(thisShape){
	map.addOverlay(thisShape);
}

function display_home() {
	window.location.reload();
}

function load_texts () {
	var preventCache = true;
	var lv_url;
	lv_url = "../cgi-bin/ajax/load_hlp.cgi";
	var help = [];
	var d = dojo.xhrGet({
		url: lv_url,
	  handleAs: "json",
		preventCache: preventCache,
		sync: true, 
		load:	function(response, ioArgs) {
						console.log("Help Texts geladen");
						help = response;
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Landen Help Texte", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}	
	});
	return help;
}

function clearComboBold(){
	if(!configData.hideNavBar){
		dojo.removeClass(dojo.byId("label_land"),"cl_bold");
		dojo.removeClass(dojo.byId("label_anbau"),"cl_bold");
		dojo.removeClass(dojo.byId("label_bereich"),"cl_bold");
		dojo.removeClass(dojo.byId("label_gemeinde"),"cl_bold");
		dojo.removeClass(dojo.byId("label_lage"),"cl_bold");
	}
}

function display() {
	// initially delete anbau overlays, then redraw
	map.clearOverlays();
	dojo.hash("",true);
	// make globaly vislibe: currentyl displayed type == hierarchie (former toggle_label)
	clearComboBold();
	switch(data.display) {
		case 0:
			if (data.landID=="") {
			// Übericht alles
				map.setCenter(new google.maps.LatLng(geo_de.lat, geo_de.lng))
				map.setZoom(geo_de.zoom);
			} else {
				if(useHash){
					var obj = {
						"land_id": data.landID
					}
					dojo.hash(dojo.objectToQuery(obj),true);
				}
				if(!configData.hideNavBar){
					dojo.addClass(dojo.byId("label_land"),"cl_bold");
				}
				data.landStore.fetchItemByIdentity({
					identity:data.landID,
					onItem: function(item) {
						var lat = data.landStore.getValue(item,"geo_lat");
						var lng = data.landStore.getValue(item,"geo_lng");
						var zoom = 1*data.landStore.getValue(item,"geo_zoom");
						if (lat != "" && lng != "" && zoom > 0) {
							map.setCenter(new google.maps.LatLng(lat, lng));
							map.setZoom(zoom);
						}
					}
				});
			}
			// draw all Anbaugebiete
			dojo.forEach(data.anbauShapes, function(anbauShapes){
				// show polygon on map...
				if (data.landID!="") {
					if (data.landID == anbauShapes.land) {
						dojo.forEach(anbauShapes.polyShapes, function(thisShape) {
							drawShape(thisShape);
						});						
					}
				} else {
					dojo.forEach(anbauShapes.polyShapes, function(thisShape) {
						drawShape(thisShape);
					});
				}
			});
			if (dojo.byId("pane_empty")) {
				dojo.byId("pane_empty").innerHTML = readNoteStart();
			}
			break;
		// Anbaugebiet
		case 1:
			if (data.anbauID == "") {
	
			} else {
				if(!configData.hideNavBar){
					dojo.addClass(dojo.byId("label_anbau"),"cl_bold");
				}
				if (dojo.byId("pane_empty")) {
					dojo.byId("pane_empty").innerHTML = readNoteStart();
				}
				// get data
				var f = function(item) {
					if(useHash){
						var obj = {
							"anbau_id": data.anbauID
						}
						dojo.hash(dojo.objectToQuery(obj),true);
					}
					// coordinates
					var lat = data.anbauStore.getValue(item,"geo_lat");
					var lng = data.anbauStore.getValue(item,"geo_lng");
					var zoom = data.anbauStore.getValue(item,"geo_zoom");
					if (lat != "" && lng != "" && zoom > 0) {
						map.setCenter(new google.maps.LatLng(lat, lng));
						map.setZoom(zoom);
					} else {
						if (dojo.byId("pane_empty")) {
							var note_text = readNoteText( "dem Anbaugebiet", data.anbauStore.getValue(item,"name") );
							dojo.byId("pane_empty").innerHTML = note_text;
						}
					}
				}
				data.anbauStore.fetchItemByIdentity({
					identity: data.anbauID,
					onItem : f
				});		
				dojo.forEach(data.anbauShapes, function(anbauShapes){
					// show polygon on map...
					if (anbauShapes.id == data.anbauID) {
						dojo.forEach(anbauShapes.polyShapes, function(thisShape) {
							drawShape(thisShape);
						});
					}
				});
				// GemeindeMarker
				dojo.forEach(data.cityMarker, function(thisMarker) {
					map.addOverlay(thisMarker);
				});
			}
			break;
		// Bereich
		case 2:
			if (data.bereichID == "") {
				
			} else {
				if(!configData.hideNavBar){
					dojo.addClass(dojo.byId("label_bereich"),"cl_bold");
				}
				var f = function(item) {
					if(useHash){
						var obj = {
							"bereich_id": data.bereichID
						}
						dojo.hash(dojo.objectToQuery(obj),true);
					}
					// coordinates
					var lat = data.bereichStore.getValue(item,"geo_lat");
					var lng = data.bereichStore.getValue(item,"geo_lng");
					var zoom = 1*data.bereichStore.getValue(item,"geo_zoom");
					if (lat != "" && lng != "" && zoom > 0) {
						map.setCenter(new google.maps.LatLng(lat, lng));
						map.setZoom(zoom);
					} else {
						var note_text = readNoteText( "dem Bereich", data.bereichStore.getValue(item,"name") );
						dojo.byId("pane_empty").innerHTML = note_text;
					}
				}
				data.bereichStore.fetchItemByIdentity({identity: data.bereichID, onItem : f});
		
				dojo.forEach(data.bereichShapes, function(shapes){
					// show polygon on map...
					if (shapes.id == data.bereichID) {
						dojo.forEach(shapes.polyShapes, function(thisShape) {
							drawShape(thisShape);
						});
					}
				});
		
				dojo.forEach(data.cityMarker, function(thisMarker) {
					map.addOverlay(thisMarker);
				});
			}
			break;
		// Gemeinde
		case 3:
			if (data.cityID == "") {
		
			} else {
				if(!configData.hideNavBar){
					dojo.addClass(dojo.byId("label_gemeinde"),"cl_bold");
				}
				dojo.forEach(data.cityMarker, function(thisMarker) {
					map.addOverlay(thisMarker);
				});
				var f = function(item) {
					if(useHash){
						var obj = {
							"gemeinde_id": data.cityID
						}
						dojo.hash(dojo.objectToQuery(obj),true);
					}
					// coordinates
					var lat = data.cityStore.getValue(item,"geo_lat");
					var lng = data.cityStore.getValue(item,"geo_lng");
					var zoom = data.cityStore.getValue(item,"geo_zoom");
					if (lat != "" && lng != "" && zoom > 0) {
						map.setCenter(new google.maps.LatLng(lat, lng));
						map.setZoom(zoom);				
					}
					if(data.lageShapes.length>0) {
						if (dojo.byId("pane_empty")){
							dojo.byId("pane_empty").innerHTML = readNoteLageForCity( data.cityStore.getValue(item,"name") ); 
						}
					}
				}
				data.cityStore.fetchItemByIdentity({
					identity: data.cityID,
					onItem : f
				});
				dojo.forEach(data.lageShapes, function(shapes){
					// show polygons on map...
					dojo.forEach(shapes.polyShapes, function(thisShape) {
						drawShape(thisShape);
					});
				});
			}
			break;
		// Lage
		case 4:
			if (data.lageID == "") {
			
			} else {
				if(!configData.hideNavBar){
					dojo.addClass(dojo.byId("label_lage"),"cl_bold");
				}
				dojo.forEach(data.cityMarker, function(thisMarker) {
					map.addOverlay(thisMarker);
				});
				var f = function(item) {
					if(useHash){
						var obj = {
							"lage_id": data.lageID
						}
						dojo.hash(dojo.objectToQuery(obj),true);
					}
					// coordinates
					var lat = data.lageStore.getValue(item,"geo_lat");
					var lng = data.lageStore.getValue(item,"geo_lng");
					var zoom = data.lageStore.getValue(item,"geo_zoom");
					if (lat != "" && lng != "" && zoom > 0) {
						map.setCenter(new google.maps.LatLng(lat, lng));
						map.setZoom(zoom);
						dojo.forEach(data.lageShapes, function(shapes){
							// show polygon on map...
							if (shapes.id == data.lageID) {
								dojo.forEach(shapes.polyShapes, function(thisShape) {
									drawShape(thisShape);
								});
								if(dojo.byId("pane_empty")){
								  if(shapes.polyShapes.length>0){	
										dojo.byId("pane_empty").innerHTML = readNotePolygon();
									} else {
										dojo.byId("pane_empty").innerHTML = readNoteText( "der Lage",
											data.lageStore.getValue(item,"name"),data.lageStore.getValue(item,"infos") );
									}
								}
							}
						});
					} else {
						if(dojo.byId("pane_empty")){
							dojo.byId("pane_empty").innerHTML = readNoteText( "der Lage",
								data.lageStore.getValue(item,"name"),data.lageStore.getValue(item,"infos") );
						}
						var fc = function(item) {
							// coordinates
							var lat = data.cityStore.getValue(item,"geo_lat");
							var lng = data.cityStore.getValue(item,"geo_lng");
							var zoom = data.cityStore.getValue(item,"geo_zoom");
							if (lat != "" && lng != "" && zoom > 0) {
								map.setCenter(new google.maps.LatLng(lat, lng));
								map.setZoom(zoom);				
							}
						}
						data.cityStore.fetchItemByIdentity({
							identity: data.cityID,
							onItem: fc
						});
					}
				}
				data.lageStore.fetchItemByIdentity({
					identity: data.lageID,
					onItem : f
				});
			}
			break;
		default:
			console.error("not supported");
			break;
	}
}

function getPolyShapes (id, polygons) {
	var polyShapes = new Array();
	dojo.forEach(polygons,
		function(polygon) {
			if (polygon.length < 1) {
				console.log("Polygon: no data");
				return;
			} else {
				var polyPoints = new Array();
				dojo.forEach(polygon,
				function(polydata) {
					// polydata = Zeile
					var lat = polydata[1];
					var lng = polydata[0];
					var xyPoint = new google.maps.LatLng(lat, lng);
					polyPoints.push(xyPoint);
				});
				var polyshape = null;
				try {
					polyshape = new GPolygon(
						polyPoints, polygonOptions.lineColor, polygonOptions.lineWeight,
						polygonOptions.lineOpacity, polygonOptions.fillColor,
						polygonOptions.opacity, {clickable:true}
					);
					//dojo.mixin(polyshape, {polygon_id: id, polygon_lfdnr: lfdnr});
					dojo.mixin(polyshape, {
						id: id
					});
				} catch(e) {
					console.error('Polygon konnte nicht erzeugt werden', e);
					showDialog("<br />Interner Fehler (Polygon)<br />" + e);
				}
				polyShapes.push(polyshape);
			}
		});
	return polyShapes;
}

/*
 * convert polyshapes into json
 */
function polyShapesToJSON(polyshapes) {
	var data = new Array();
	dojo.forEach(polyshapes, function(shape) {
		var coords = new Array();
		var latlng_0 = null;
		// each polygon...
		for(var i=0; i < shape.getVertexCount(); i++) {
			var data_line = [];
			var latlng = shape.getVertex(i);
			var lat = latlng.lat();
			var lng = latlng.lng();
			if (i == 0) {
				lat_0 = lat;
				lng_0 = lng;
			}
			var data_line = [lng, lat, "20"];
			coords.push(data_line);
		}
		// TODO Korrektur: Letzer Punkt muss gleich erstem sein, damit das
		// Polygon geschlossen ist.
		if (lat_0 != lat && lng_0 != lng )  {
			console.log("Hier fehlt der letzte Punkt - wird hinzugefügt");
			var data_line = [lng_0, lat_0, "20"];
			coords.push(data_line);
		}
		data.push(coords);
	});
	return dojo.toJson(data,false);
}

function removeShapes(dataShapes){
	dojo.forEach(dataShapes, function(shapes){
		// delete polygon from map...
		dojo.forEach(shapes.polyShapes, function(thisShape) {
			map.removeOverlay(thisShape);
		});
	});
}

function removeMarker(dataMarker){
	dojo.forEach(data.cityMarker, function(marker){
		map.removeOverlay(marker);
	});
}

function disconnectHandles() {
	dojo.disconnect(landConnectionHandle);
	dojo.disconnect(anbauConnectionHandle);
	dojo.disconnect(bereichConnectionHandle);
	dojo.disconnect(gemeindeConnectionHandle);
	dojo.disconnect(gemeindeConnectionHandle);
}

function connectHandles() {
	landConnectionHandle = dojo.connect(dijit.byId("comboLand"),"onChange",handleLandChanged)
	anbauConnectionHandle = dojo.connect(dijit.byId("comboAnbau"), "onChange", handleAnbauChanged);
	bereichConnectionHandle = dojo.connect(dijit.byId("comboBereich"), "onChange", handleBereichChanged);
	gemeindeConnectionHandle = dojo.connect(dijit.byId("comboCity"), "onChange", handleGemeindeChanged);
	lageConnectionHandle = dojo.connect(dijit.byId("comboLage"), "onChange", handleLageChanged);
}

/*
 * new object messages with function show()
 * id = id of messages <div> tag
 */
function hideMessages(id, text) {
	var box = dojo.byId(id);
	console.log("hide message ", text);
	window.status = text;
	box.innerHTML = text;
	dojo.fadeOut({node:box, duration: 1500}).play();
		var a3 = dojo.animateProperty({
		node: box,
		duration: 100,
		onEnd: function() { console.log("onEnd", text); dojo.removeClass( "messages", "index"); },
		properties: { height: {start: '200', end: '400"' } }
	});
	a3.play();
}

function showMessage(text) {
	var box = dojo.byId("messages");
	console.log("showMessage ", text);
	window.status = text;
	box.innerHTML = text;
	var a3 = dojo.animateProperty({
		node: box,
		duration: 100,
		onEnd: function() { console.log("onEnd"); dojo.addClass( "messages", "index"); },
		properties: { height: {start: '200', end: '400"' } }
	});
		
	var a1 = dojo.fadeOut({node:box, duration: 1500});
	var a2 = dojo.fadeIn({node:box, duration: 1500});
	var fades = dojo.fx.chain([a2,a1]);
  fades.play();
	a3.play();
}

function disableAllCombo() {
	dijit.byId("comboLand").set('disabled', true);
	dijit.byId("comboAnbau").set('disabled', true);
	dijit.byId("comboBereich").set('disabled', true);
	dijit.byId("comboCity").set('disabled', true);
	dijit.byId("comboLage").set('disabled', true);
}

function enableAllCombo() {
	//TODO: Change to onSize for Performance reasonso or data.xxxxID
	dijit.byId("comboLand").set('disabled', false);
	//dijit.byId("comboAnbau").set('disabled', false);
	
	if (dijit.byId("comboLand").get('value') != "") {
		// check how many items
		var store = dijit.byId("comboAnbau").store;
		store.fetch({
			query: {id: "*"},
			onComplete: function(items) {
				if (items.length == 1) {
					dijit.byId("comboAnbau").set("disabled", true);
					if (dijit.byId("comboAnbau").get('value') == "") {
						dijit.byId("comboAnbau").set('value',store.getValue(items[0], "bezeichnung"));
					}
				} else {
					dijit.byId("comboAnbau").set('disabled', false);	
				}
			}
		});	
	}

	
	if (dijit.byId("comboAnbau").get('value') != "") {
		// check how many items
		var store = dijit.byId("comboBereich").store;
		store.fetch({
			query: {id: "*"},
			onComplete: function(items) {
				if (items.length == 1) {
					dijit.byId("comboBereich").set("disabled", true);
					if (dijit.byId("comboBereich").get('value') == "") {
						dijit.byId("comboBereich").set('value',store.getValue(items[0], "name"));
					}
				} else {
					dijit.byId("comboBereich").set('disabled', false);
				}
			}
		});
	}
	if (dijit.byId("comboBereich").get('value') != "") {
		// check how many items
		var store = dijit.byId("comboCity").store;
		store.fetch({
			query: {id: "*"},
			onComplete: function(items) {
				if (items.length == 1) {
					dijit.byId("comboCity").set("disabled", true);
					if (dijit.byId("comboCity").get('value') == "") {
						dijit.byId("comboCity").set('value',store.getValue(items[0], "name"));
					}
				} else {
					dijit.byId("comboCity").set('disabled', false);	
				}
			}
		});	
	}
	if (dijit.byId("comboCity").get('value') != "") {
		// check how many items
		var store = dijit.byId("comboLage").store;
		store.fetch({
			query: {id: "*"},
			onComplete: function(items) {
				if (items.length == 1) {
					dijit.byId("comboLage").set("disabled", true);
					if (dijit.byId("comboLage").get('value') == "") {
						dijit.byId("comboLage").set('value',store.getValue(items[0], "name"));
						//loadedLage.lage_id = dijit.byId("comboLage").attr('value',store.getValue(items[0], "id"));
					}
				} else {
					dijit.byId("comboLage").set('disabled', false);	
				}
			}
		});		
	}
}

function disableAllMenu(){
	if(dijit.byId("createbuttons")) {
		dijit.byId("createbuttons").set('disabled', true);
	}
	if(dijit.byId("changebuttons")) {
		dijit.byId("changebuttons").set('disabled', true);
	}
	if (dijit.byId("admin")){
		dijit.byId("admin").set('disabled', true);
	}
	dijit.byId("button_suche").set('disabled', true);
	dijit.byId("for").set('disabled', true);
	dijit.byId("login").set("disabled", true);
}

function disableMenu(){
	if(sessionid!=""){
		if(dijit.byId("createbuttons")) {
			dijit.byId("menu_create_bereich").set("disabled", true);
			dijit.byId("menu_create_gemeinde").set("disabled", true);
			dijit.byId("menu_create_lage").set("disabled", true);
			dijit.byId("menu_create_polygon_lage").set("disabled", true);
		}
		if(dijit.byId("changebuttons")) {
			dijit.byId("menu_change_anbau").set("disabled", true);
			dijit.byId("menu_change_bereich").set("disabled", true);
			dijit.byId("menu_change_gemeinde").set("disabled", true);
			dijit.byId("menu_change_lage").set("disabled", true);
		}
	}
	dijit.byId("menu_display_link").set("disabled", true);
}

function enableAllMenu(){
	if(sessionid!=""){
		if(dijit.byId("createbuttons")) {
			dijit.byId("createbuttons").set('disabled', false);
			dijit.byId("changebuttons").set('disabled', false);
			if(dijit.byId("admin")){
				dijit.byId("admin").set('disabled', false);
			}
			if (data.anbauID==""){
				dijit.byId("menu_change_anbau").set("disabled", true);
				dijit.byId("menu_create_bereich").set("disabled", true);				
			} else {
				dijit.byId("menu_change_anbau").set("disabled", false);
				dijit.byId("menu_create_bereich").set("disabled", false);
			}
			if (data.bereichID=="") {
				dijit.byId("menu_change_bereich").set("disabled", true);
				dijit.byId("menu_create_gemeinde").set("disabled", true);
			} else {
				dijit.byId("menu_change_bereich").set("disabled", false);
				dijit.byId("menu_create_gemeinde").set("disabled", false);
			}
			if (data.cityID=="") {
				dijit.byId("menu_change_gemeinde").set("disabled", true);
				dijit.byId("menu_create_lage").set("disabled", true);				
			} else {
				dijit.byId("menu_change_gemeinde").set("disabled", false);
				dijit.byId("menu_create_lage").set("disabled", false);
			}
			if (data.lageID=="") {
				dijit.byId("menu_change_lage").set("disabled", true);
				dijit.byId("menu_create_polygon_lage").set("disabled", true);
			} else {
				dijit.byId("menu_change_lage").set("disabled", false);
				dijit.byId("menu_create_polygon_lage").set("disabled", false);
			}
		}
	}
	
	dijit.byId("button_suche").set('disabled', false);
	dijit.byId("for").set('disabled', false);
	
	if (data.lageID =="") {
		dijit.byId("menu_display_link").set("disabled", true);
	} else {
		dijit.byId("menu_display_link").set("disabled", false);
	}
	dijit.byId("login").set("disabled", false);
}

/*
 * check whether "Freitextsuche" is selected: Then Create and Change are
 * disabled.
 */
function checkAccContainer() {
	// tab container event
	dojo.subscribe("acc_container-selectChild", function(child){
	  if (maintain) {
			// we are in maintain mode -> it is not allowed to select an other tab
			dijit.byId("acc_container").selectChild(dijit.byId("ac1"));
		} 
		if (child.id == "ac2") {
			// search tab -> disable edit and create functions
			if(dijit.byId("createbuttons")){
				dijit.byId("createbuttons").set('disabled',true);
				dijit.byId("changebuttons").set('disabled',true);
			}
		} else {
			// set to activ only when Hirachy tab is displayed
			enableAllMenu();
		}
	});
}

/*
 **************************** search *******************************************
 */
function doSearch(evt){
	var s = dojo.byId("for");
	if (s.value == "") {
		dojo.stopEvent(evt);
		evt.preventDefault();		
		return;
	}
	if (dijit.byId("form_suche").validate()) {
		showNavBereich();
		searchForm("form_suche");
	}
	dojo.stopEvent(evt);
	evt.preventDefault();		
}

function searchForm(form_id) {
	/*
		TODO Probleme mit IE: http://de.selfhtml.org/javascript/objekte/location.htm#href
	*/
	dojo.byId("pane_search_res_header").innerHTML = '';
	var f = dojo.byId("for");
	var content = {"for": f.value, "sessionid": sessionid};
	dojo.xhrPost({
		url: "../cgi-bin/ajax/suche.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
		content: content,
	  //form: dojo.byId(form_id),
		load:	function(response, ioArgs) {
						console.log("Suche ausgeführt: ", response, ioArgs);
						if (response.result == "failure") {
							showDialog(response.message1);
							return response;
						} else {							
							console.log("Suchergebnis: ", response, ioArgs);
							if (response.length==1) {
								dijit.byId("acc_container").selectChild(dijit.byId("ac1"));
							} else {
								dijit.byId("acc_container").selectChild(dijit.byId("ac2"));
							}
							if (response.length < 1) {
								dojo.byId("pane_search_res").innerHTML = "Ergebnis: Nichts gefunden! <br>";
								return response;
							}
	            g_ergebnisliste_freitext = response;
	            erste_lage = get_erste_lage(response);
	            load_reverse_lage(erste_lage);
							return response;
						}
					},
		error:	function(response, ioArgs) {
							console.log("Fehler bei der Suche", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}
	});
}

// erste Lage im Ergebnis suchen
// TODO no 1. Lage, only city or Bereich????
function get_erste_lage(response){
var lage_id = 0;
var erg_type;
  
  for (var i=0; i < response.length; i++) {
  	erg_type = response[i].type;
  	if (erg_type == "1") {
  		lage_id = response[i].lage_id;
  		return lage_id;
  	}
  }
  
  return 0;
}

// Ergebnisliste zur Freitextsuche definieren
function build_ergebnisliste(response, ergebnis_lage_id, ergebnis_city_id, ergebnis_bereich_id, ergebnis_anbau_id){
var ergebnis = "";
var lage_ergebnis ="<BR><B>Lagen:</B><BR>";
var gemeinde_ergebnis = "";
var bereich_ergebnis = "";
var anbaugebiet_ergebnis = "";
  
  if (response == null) { return ""; };
  
	for (var i=0; i < response.length; i++) {
		var erg_type = response[i].type;
		if (erg_type == "1") {									
			if (lage_ergebnis == "") { 
				var erg_id = response[i].lage_id;
				lage_ergebnis = "<BR><B>Lagen:</B><BR>";
				load_reverse_lage(erg_id);
		    var erg_bez = response[i].bezeichnung + " (" + response[i].accuracy +"%)";
		    lage_ergebnis = lage_ergebnis + '<a href= javascript:load_reverse_lage("'+ erg_id + '")><B>' + erg_bez + '</B></a><br>';
		  }	else {							  
		  	var erg_id = response[i].lage_id;
		    var erg_bez = response[i].bezeichnung + " (" + response[i].accuracy +"%)";
		    if (erg_id == ergebnis_lage_id) {
		    	lage_ergebnis = lage_ergebnis + '<a href="javascript:load_reverse_lage('+ erg_id + ')"><B>' + erg_bez + '</B></a><br>';
		    } else {
		    	lage_ergebnis = lage_ergebnis + '<a href="javascript:load_reverse_lage('+ erg_id + ')">' + erg_bez + '</a><br>';
		    }
		  }
		}				
		if (erg_type == "2") {
			if (gemeinde_ergebnis == "") { gemeinde_ergebnis = "<BR><B>Gemeinden:</B><BR>"; }
		  var erg_id = response[i].gemeinde_id;
		  var erg_bez = response[i].bezeichnung + " (" + response[i].accuracy +"%)";
			if (erg_id == ergebnis_city_id) {
				gemeinde_ergebnis = gemeinde_ergebnis + '<a href= javascript:load_reverse_city('+erg_id+')><b>' + erg_bez + '</b></a><br>';
			} else {
				gemeinde_ergebnis = gemeinde_ergebnis + '<a href= javascript:load_reverse_city('+erg_id+')>' + erg_bez + '</a><br>';				
			}
		}																		  
		if (erg_type == "3") {
			if (bereich_ergebnis == "") { bereich_ergebnis = "<BR><B>Bereiche:</B><BR>"; }
		  var erg_id = response[i].bereich_id;
	  	var erg_bez = response[i].bezeichnung + " (" + response[i].accuracy +"%)";
			if (erg_id == ergebnis_bereich_id) {
				bereich_ergebnis = bereich_ergebnis + '<a href= javascript:load_reverse_bereich('+erg_id+')><b>' + erg_bez + '</b></a><br>';
			} else {
				bereich_ergebnis = bereich_ergebnis + '<a href= javascript:load_reverse_bereich('+erg_id+')>' + erg_bez + '</a><br>';				
			}
	  }											  			  
		if (erg_type == "4") {
			if (anbaugebiet_ergebnis == "") { anbaugebiet_ergebnis = "<BR><B>Anbaugebiete:</B><BR>"; }
		  var erg_id = response[i].anbau_id;
		  var erg_bez = response[i].bezeichnung + " (" + response[i].accuracy +"%)";
			if (erg_id == ergebnis_anbau_id) {
				anbaugebiet_ergebnis = anbaugebiet_ergebnis + '<a href= javascript:laodReverseAnbau('+erg_id+')><b>' + erg_bez + '</b></a><br>';				
			} else {
				anbaugebiet_ergebnis = anbaugebiet_ergebnis + '<a href= javascript:loadReverseAnbau('+erg_id+')>' + erg_bez + '</a><br>';
			}
		}											  			  				
	}
	ergebnis = ergebnis + lage_ergebnis + gemeinde_ergebnis + bereich_ergebnis + anbaugebiet_ergebnis; 
	return ergebnis;
}

function loadReverseLand(id){
	selectLand(id);
	try {
		dojo.byId("pane_search_res_header").innerHTML = readFreitextHilfe();
	//	if (typeof g_ergebnisliste_freitext!='undefined') {
	//		dojo.byId("pane_search_res").innerHTML = build_ergebnisliste(g_ergebnisliste_freitext, null, null, null, id);			
	//	}
	} catch (e) {
		console.error("Error:",e);
	}
}

// load_reverse_anbau
function loadReverseAnbau(id){
	selectAnbau(id);
	try {
		dojo.byId("pane_search_res_header").innerHTML = readFreitextHilfe();
		if (typeof g_ergebnisliste_freitext!='undefined') {
			dojo.byId("pane_search_res").innerHTML = build_ergebnisliste(g_ergebnisliste_freitext, null, null, null, id);			
		}
	} catch (e) {
		console.error("Error:",e);
	}
}

// load "reverse information" for lage
function load_reverse_lage(lage_id){
	if (lage_id == "") {return}
	var ergebnis_text;
	console.log("load reverse");
	var d = dojo.xhrGet({
		url: 	"../cgi-bin/ajax/reverse_hierachy.cgi?lage_id="+lage_id,
		handleAs: "json",
		preventCache: true,
		load:	function(response, ioArgs) {
						console.log("Reverse Info geladen: ", response, ioArgs);
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Landen von Reverse Info", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}	
	});
	d.addCallback(
		function(reverseInfo) {
			console.log("ReverseInfo: ", reverseInfo);
			try {
				dojo.byId("pane_search_res_header").innerHTML = readFreitextHilfe();
				if (typeof g_ergebnisliste_freitext!='undefined') {
					dojo.byId("pane_search_res").innerHTML = build_ergebnisliste(g_ergebnisliste_freitext, lage_id);					
				}
			} catch (e) {
				console.error("Error:",e);
			}
			setComboData(reverseInfo.anbaugebiet_id, reverseInfo.bereich_id, reverseInfo.gemeinde_id, reverseInfo.lage_id);	
		}
	);
}

// load "reverse information" for city
function load_reverse_city(id){
	if (id == "") {return}
	var ergebnis_text;
	console.log("load reverse city");
	var d = dojo.xhrGet({
		url: 	"../cgi-bin/ajax/reverse_hierachy.cgi?gemeinde_id="+id,
		handleAs: "json",
		preventCache: true,
		load:	function(response, ioArgs) {
						console.log("Reverse Info geladen: ", response, ioArgs);
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Landen von Reverse Info", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}	
	});
	d.addCallback(
		function(reverseInfo) {
			console.log("ReverseInfo: ", reverseInfo);
			try {
				dojo.byId("pane_search_res_header").innerHTML = '';
				if (typeof g_ergebnisliste_freitext!='undefined') {
					dojo.byId("pane_search_res").innerHTML = build_ergebnisliste(g_ergebnisliste_freitext, null, id );
				}
			} catch (e) {
				console.error("Error:",e);
			}
			setComboData(reverseInfo.anbaugebiet_id, reverseInfo.bereich_id, reverseInfo.gemeinde_id, reverseInfo.lage_id);	
		}
	);
}

// load "reverse information" for city
function load_reverse_bereich(id){
	if (id == "") {return}
	var ergebnis_text;
	console.log("load reverse bereich");
	var d = dojo.xhrGet({
		url: 	"../cgi-bin/ajax/reverse_hierachy.cgi?bereich_id="+id,
		handleAs: "json",
		preventCache: true,
		load:	function(response, ioArgs) {
						console.log("Reverse Info geladen: ", response, ioArgs);
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Landen von Reverse Info", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}	
	});
	d.addCallback(
		function(reverseInfo) {
			console.log("ReverseInfo: ", reverseInfo);
			try {
				dojo.byId("pane_search_res_header").innerHTML = '';
				if (typeof g_ergebnisliste_freitext!='undefined') {
					dojo.byId("pane_search_res").innerHTML = build_ergebnisliste(g_ergebnisliste_freitext, null, null, id);
				}
			} catch (e) {
				console.error("Error:",e);
			}
			setComboData(reverseInfo.anbaugebiet_id, reverseInfo.bereich_id, reverseInfo.gemeinde_id, reverseInfo.lage_id);	
		}
	);
}

function errorComboSelect(error){
	console.error("Error in ComboSelect",error);
}

function setComboData(anbau_id, bereich_id, city_id, lage_id) {
	// then display in callback:
	var doDisplay=true;
	console.log("setComboData", anbau_id, bereich_id, city_id, lage_id);
	data.bereichShapes=new Array();
	data.cityMarker=new Array();
	data.lageShapes=new Array();
	data.display = 0;
	
	handleLand=false;
	dijit.byId("comboLand").set('value',"");	
	handleAnbau=false;
	dijit.byId("comboAnbau").set('value',"");
	handleBereich=false;
	dijit.byId("comboBereich").set('value',"");
	handleCity=false;
	dijit.byId("comboCity").set('value',"");
	handleLage=false;
	dijit.byId("comboLage").set('value',"");
	
	if (anbau_id != "") {
		data.anbauStore.fetchItemByIdentity({
			identity: anbau_id,
			onError: errorComboSelect,
			onItem: function(item, request){
				data.display = 1;
				data.anbauID = anbau_id;
				handleLand=false;
				var landID=data.anbauStore.getValue(item, "land");
				setComboLand(landID);
				dijit.byId("comboAnbau").set('disabled', false);
				if(bereich_id!=""){handleAnbau=false;}else{handleAnbau=true;}
				dijit.byId("comboAnbau").set('value',data.anbauStore.getValue(item, "bezeichnung"));
				dijit.byId("comboAnbau").item = item;
				dijit.byId("comboAnbau").query.land = landID;
				if(city_id!=""){doDisplay=false}else{doDisplay=true}
				enableBereich(data.anbauID,doDisplay);
				if (bereich_id != "") {
					data.bereichStore.fetchItemByIdentity({
						identity: bereich_id,
						onError: errorComboSelect,
						onItem: function(item,request){
							data.display = 2;
							if(city_id!=""){handleBereich=false;} else {handleBereich=true;}
							dijit.byId("comboBereich").set('value',data.bereichStore.getValue(item, "name"));
							dijit.byId("comboBereich").item = item;
							if(city_id!=""){doDisplay=false}else{doDisplay=true}
							data.bereichID = bereich_id;
							enableCity(bereich_id,doDisplay);
							if (city_id != "") {
								data.cityStore.fetchItemByIdentity({
									identity: city_id,
									onError: errorComboSelect,
									onItem: function(item,request){
										data.cityID = city_id;
										data.display = 3;
										if(lage_id!=""){handleCity=false;}else{handleCity=true;}
										dijit.byId("comboCity").set('value',data.cityStore.getValue(item, "name"));
										dijit.byId("comboCity").item = item;
										if (lage_id != "") {
											enableLage(data.cityID,false);
											data.lageStore.fetchItemByIdentity({
												identity: lage_id,
												onError: errorComboSelect,
												onItem: function(item,request){
													data.lageID = lage_id;
													data.display = 4;
													handleLage=true;
													dijit.byId("comboLage").set('value',data.lageStore.getValue(item, "name"));
													dijit.byId("comboLage").item = item;
													display();
												}
											});
										} else {											
										}
									}
								});
							} else {
							}
						}
					});
				} else {
				}
			}
		});
	} else {
		console.error("anbauID nicht gesetzt");
	}
}

// returns ids for "location.search" 
function get_object_id (search) {
	var object = {
		found:false,
		display: 0, // 1=Anbaugebiet,2,3,4=Lage
		id: ""
	};
	var found=false;
	var lage_id = "";
	if (search != "") {
		var uebergabe = search;
		uebergabe = uebergabe.substring(1, uebergabe.length);
		var params = uebergabe.split("&");
		var regLage = /lage_id=(\d+)$/i;
		dojo.forEach(params, function(param) {
			found = regLage.exec(param);
			if (found) {
				object.display = 4;
				object.id = found[1];
				object.found=true;
			}
		});
		if (found) return object;
		var regCity = /gemeinde_id=(\d+)$/i;
		dojo.forEach(params, function(param) {
			found = regCity.exec(param);
			if (found) {
				object.display = 3;
				object.id = found[1];
				object.found=true;
			}
		});
		if (found) return object;
		var regBereich = /bereich_id=(\d+)$/i;
		dojo.forEach(params, function(param) {
			found = regBereich.exec(param);
			if (found) {
				object.display = 2;
				object.id = found[1];
				object.found=true;
			}
		});
		if (found) return object;
		var regAnbau = /anbau_id=(\d+)$/i;
		dojo.forEach(params, function(param) {
			found = regAnbau.exec(param);
			if (found) {
				object.display = 1;
				object.id = found[1];
				object.found=true;
			}
		});
		if (found) return object;
		var regLand = /land_id=(\w+)$/i;
		dojo.forEach(params, function(param) {
			found = regLand.exec(param);
			if (found) {
				object.display = 0;
				object.id = found[1];
				object.found=true;
			}
		});
		if (found) return object;
	}
	return object;
}

//get search string
function getForSearchString(search){
	var searchFor = "";
	if (search != "") {
		var uebergabe = search;
		uebergabe = uebergabe.substring(1, uebergabe.length);
		var params = uebergabe.split("&");
		dojo.forEach(params, function(param) {
			var reg = /for=(.+)$/i;
			
			found = reg.exec(param);
			if (found) {
				var erg=convertUTF(found[1]);
				searchFor = decodeURIComponent(erg);
				console.log("search for: ",searchFor);
				dijit.byId("for").set("value",searchFor);
				showNavBereich();
				searchForm("form_suche");
			}
		});
	}
}

function convertUTF(inString){
	var retString = inString.replace(/%F6/g, "ö");
	retString=retString.replace(/%C4/g,"Ä");
	retString=retString.replace(/%D6/g,"Ö");
	retString=retString.replace(/%DC/g,"Ü");
	retString=retString.replace(/%E4/g,"ä");
	retString=retString.replace(/%FC/g,"ü");
	retString=retString.replace(/%DF/g,"ß");
	return retString;
}

function show_next_weinlage() {
	// search from current center of map
  get_closest_lage(map.getCenter());  	
}

// Berechne Entfernung zwischen zwei Punkten
function get_closest_lage(current_point) {

var closest_lage;
	
	console.log("aktuelle Position:", current_point.x, current_point.y);
// Lese alle Koordinaten
	var d = dojo.xhrPost({
		url: "../cgi-bin/ajax/get_geo_coord.cgi",
		handleAs: "json",
		load:	function(response, ioArgs) {
						console.log("Alle Geokoordinaten gelesen: ");
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Lesen Geo-Koordinaten", response, ioArgs);
							show_dialog(response.responseText);
							return response;
						}
	  });
		d.addCallback(
			function(geo_coord) {		
				// Berechne kuerzeste Entfernung zu p					
				var distance;
				var min_dist=10000000;	// 10.000 km		
        for (var i=0; i < geo_coord.length; i++) {
        	p = new GLatLng(geo_coord[i][1], geo_coord[i][2]);
        	distance = current_point.distanceFrom(p);
        	if ((distance < min_dist) && (distance > 0)) {
        		closest_lage = geo_coord[i][0];
        		min_dist = distance;
        	}
        }
        console.log("naheste Lage: ", closest_lage, "( ", min_dist, " Meter )");
				// show Weinlage				
				//loadedLage.lage_id = closest_lage;
    		console.log("Lese Lage ", closest_lage);    		
    		load_reverse_lage(closest_lage);        
			}
	);
}

