
// openDialog(id,Title,url){....}

/*
 * Statistik Lagen
 */
function statistik_lagen() {
	var d = dojo.xhrPost({
		url: "../cgi-bin/ajax/get_statistik.cgi",
		handleAs: "json",
		load: function(response, ioArgs) {
			return response;
		},
		error: function(response, ioArgs) {
			console.log("Fehler beim Lesen der Statistik Daten", response, ioArgs);
			show_dialog(response.responseText);
			return response;
		}
	});
	d.addCallback(function(statistikInfo) {
		var anzahl_lagen, anzahl_lagen_geo, anzahl_lagen_polygon;
		var anzahl_anbaugebiete, anzahl_bereiche, anzahl_gemeinden;

		// Anazahl aller Lagen
		anzahl_lagen = statistikInfo.anzahl_lagen;
		anzahl_lagen_geo = statistikInfo.anzahl_lagen_geo;
		anzahl_lagen_polygon = statistikInfo.anzahl_lagen_polygon;
		anzahl_anbaugebiete = statistikInfo.anzahl_anbaugebiete;
		anzahl_bereiche = statistikInfo.anzahl_bereiche;
		anzahl_gemeinden = statistikInfo.anzahl_gemeinden;

		var content = '<TABLE style="border:1px solid black; empty-cells:show"><COLGROUP><col width="160"><col width="64"></COLGROUP><TR><TH><B>Typ</B></TH><TH align="right"><B>Anzahl</B></TH></TR>';
		content = content + '<TR><TD>Anbaugebiete</TD><TD align="right">' + anzahl_anbaugebiete + '</TD></TR>';
		content = content + '<TR><TD>Bereiche</TD><TD align="right">' + anzahl_bereiche + '</TD></TR>';
		content = content + '<TR><TD>Gemeinden</TD><TD align="right">' + anzahl_gemeinden + '</TD></TR>';
		content = content + '<TR><TD>Weinlagen</TD><TD align="right">' + anzahl_lagen + '</TD></TR>';
		content = content + '<TR><TD>Lagen mit Geo Daten</TD><TD align="right">' + anzahl_lagen_geo + '</TD></TR>';
		content = content + '<TR><TD>Lagen mit Polygon(en)</TD><TD align="right">' + anzahl_lagen_polygon + '</TD></TR>';
		content = content + '</TABLE>';

		showDialogContent("dialog_statistic_lagen", "Statistik", content);
	});
}

/*
 * Impressum
 */
function display_impressum() {
	showDialogHref("dialog_impressum", "Impressum", "../cgi-bin/ajax/load_text.cgi?id=7")
}

/*
 *********************** Miscellaneous *****************************************
 */

// show help dialog with text id as key
function showHelpText(id){
	var c = new dijit.layout.ContentPane({preventCache: true, style:"height:400px; width:500px;" });
	c.set("href", "../cgi-bin/ajax/load_text.cgi?id="+id);
	console.log("Show Help Lage");
	var d = new dijit.Dialog({title: "Hilfe"});
	var content = "<div>"+"Test"+"</div>";
	d.set('content',c.domNode);
	d.show();
}

function showDialogSubmitError(){
	var d = dijit.byId("dialog_error");
	if (d == null) {
		d = new dijit.Dialog({
			title: "Fehler/Kommentare melden",
			id: "dialog_error"
		});
		var c = dijit.layout.ContentPane({
			style: "height:250px; width:500px;"
		});
		var h = dojo.create("h2",{innerHTML:"Feedback Formular"},c.domNode);
		var t = dojo.create("div",{innerHTML:"Hier können Sie uns Fehler oder Kommentare zu weinlagen-info.de melden."},
												c.domNode);
		
		dojo.create("br",null,c.domNode);
	
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var emailLabel = dojo.create("label", {
			'for': "email"
		},c1);
		emailLabel.innerHTML = "E-Mail";
		var pwInput = new dijit.form.ValidationTextBox({
			trim: "true",
			name: "ta_email",
			id: "ta_email",
			placeHolder: "Ihre email Adresse"
		});
		c1.appendChild(pwInput.domNode);
		dojo.create("br",null,c.domNode);
		
		var c2 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var textLabel = dojo.create("label", {
			'for': "ta_error"
		},c2);
		textLabel.innerHTML = "Freitext";
		//c.domNode.appendChild(emailLabel);
		var text = dojo.create("textarea", {
			id:"ta_error",
			name:"ta_error",
			cols:"50",
			rows:"4"
		});
		c2.appendChild(text);
		dojo.create("br",null,c.domNode);
		var c3 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var send = new dijit.form.Button({
			label: "Senden",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: sendError
		},
		document.createElement("button"));
		c3.appendChild(send.domNode);
		var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortSendError
		},
		document.createElement("button"));
		c3.appendChild(abort.domNode);
		
		d.set('content',c.domNode);
	}
	d.show();
}

function sendError(){
	
  var mail_sender = dojo.byId("ta_email").value;
  var mail_body = dojo.byId("ta_error").value;
  
  console.log("Bug gemeldet", mail_sender, mail_body);
	
	var d = dojo.xhrPost({
		url: "../cgi-bin/ajax/report_error.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
		content: {
        mail_sender: mail_sender,
        mail_text: mail_body
      },
		load:	function(response, ioArgs) {
						console.log("Feedback gesendet: ", response, ioArgs);
						showMessage("Feedback gesendet");
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Senden von Feedback", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}
	  });
	var d = dijit.byId("dialog_error");
	d.hide();
}

function abortSendError(){
	var d = dijit.byId("dialog_error");
	d.hide();
}

// show Dialog with content (string)
function showDialogContent(id, title, content) {
	//TODO: Set focus on OK button
	// open dialog + button that shows content
	var d = dijit.byId(id);
	if (d == null) {
		d = new dijit.Dialog({
			title: title,
			id: id
		});
		//dojo.style(d.closeButtonNode, "visibility", "hidden");
		var b = new dijit.form.Button({
			id: "buttonC",
			label: "Ok"
		});
		var handle = dojo.connect(b, "onClick",
		function() {
			d.hide();
		});
		var statDiv = document.createElement("div");
		var statTDiv = document.createElement("div");
		statTDiv.innerHTML = content;
		statDiv.appendChild(statTDiv);
		statDiv.appendChild(b.domNode);
		d.set('content',statDiv);
	}
	d.show();
	dijit.byId("buttonC").focus();
}

// show Dialog that load content with href 
function showDialogHref(id, title, href) {
	//TODO: Set focus on OK button
	var d = dijit.byId(id);
	if (d == null) {
		d = new dijit.Dialog({
			title: title,
			id: id
		});
		//dojo.style(d.closeButtonNode, "visibility", "hidden");
		var b = new dijit.form.Button({
			label: "Ok",
			id: id+"button"
		});
		b.focus();
		var handle = dojo.connect(b, "onClick",
		function() {
			d.hide();
		});
		var c = dijit.layout.ContentPane({
			style: "height:400px; width:500px;"
		});
		c.set('href',href);
		var statDiv = dojo.create("div");
		statDiv.appendChild(c.domNode);
		statDiv.appendChild(b.domNode);
		d.set('content',statDiv);
	}
	dijit.byId(id+"button").focus();
	d.show();
}

/*
 ******************************** Menü *****************************************
 */

function setupMenu(activity) {
	if (sessionid!="") {
		createMenu(activity);
	}
	if (navigator.geolocation) {
		console.log("Position ermittelbar");
		// erstmal nur Menü-Eintrag setzen
		dijit.byId("menu_next_weinlage").set("disabled", false);
		dijit.byId("menu_current_position").set("disabled", false);
	} else {
		console.log("Position NICHT ermittelbar");
		// bzw. komplett ausblenden...
		dijit.byId("menu_next_weinlage").set("disabled", true);
		dijit.byId("menu_current_position").set("disabled", true);
	}
}

function show_aktuelle_position() {
	var adresse_ermitteln = function(pos) {
		console.log("Position", pos.coords.latitude, pos.coords.longitude);
		map.setCenter(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude));
		// oder Marker setzen!!!!
		map.setZoom(12);
	}
	var adresse_fehler = function(err) { // Geolocation ist bei der Ortung gescheitert
		// err.message sollte einen Fehlertext enthalten, das klappt in der Praxis jedoch nicht immer. Zuverlässiger ist err.code:
		switch (err.code) {
		case 1:
			showDialog('Ortung: keine Erlaubnis');
			break;
		case 2:
			showDialog('Ortung: Server konnte nicht orten');
			break;
		case 3:
			showDialog('Ortung: Timeout');
			break;
		default:
			showDialog('Ortung: keine Angabe');
			break;
		}
	}
	navigator.geolocation.getCurrentPosition(adresse_ermitteln, adresse_fehler, {
		timeout: 1000
	});
}

function createMenu(activity) {
	if(menuCreated){
		return;
	}
	var toolBar1 = dijit.byId("toolbar");
	//create
	var menu_create = new dijit.Menu({
		id: "menu_create",
		style: "display: none;"
	});
	var menu_create_anbau = new dijit.MenuItem({
		label: text.anbaugebiet,
		onClick: createAnbaugebiet
	});
	menu_create.addChild(menu_create_anbau);
	var menu_create_bereich = new dijit.MenuItem({
		id: "menu_create_bereich",
		label: "Bereich",
		onClick:createBereich
	});
	menu_create.addChild(menu_create_bereich);
	var menu_create_gemeinde = new dijit.MenuItem({
		id: "menu_create_gemeinde",
		label: "Gemeinde",
		onClick: createCity
	});
	menu_create.addChild(menu_create_gemeinde);
	var menu_create_lage = new dijit.MenuItem({
		id: "menu_create_lage",
		label: "Lage",
		onClick: createLage
	});
	menu_create.addChild(menu_create_lage);
	var menu_create_polygon_lage = new dijit.MenuItem({
		id: "menu_create_polygon_lage",
		label: "Polygon",
		onClick: createPolygon
	});
	menu_create.addChild(menu_create_polygon_lage);
	var createbuttons = new dijit.form.DropDownButton({
		id: "createbuttons",
		//style:"display:none;",
		label: "Anlegen",
		name: "createbuttons",
		dropDown: menu_create,
		optionsTitle: 'Anlegen',
		showLabel: true
	});
	dojo.style(dijit.byId("createbuttons").domNode,"display","none");
	var s1 = new dijit.ToolbarSeparator({
		id: "s1",
		style:"display:none;"
	});
	toolBar1.addChild(createbuttons, 0);
	toolBar1.addChild(s1, 1);
	//change
	var menu_change = new dijit.Menu({
		id: "menu_change",
		style: "display: none;"
	});
	var menu_change_anbau = new dijit.MenuItem({
		id: "menu_change_anbau",
		label: "Anaugebiet",
		style:"display:none;",
		onClick: changeAnbaugebiet
	});
	menu_change.addChild(menu_change_anbau);
	var menu_change_bereich = new dijit.MenuItem({
		id: "menu_change_bereich",
		label: "Bereich",
		style:"display:none;",
		onClick: changeBereich
	});
	menu_change.addChild(menu_change_bereich);
	var menu_change_gemeinde = new dijit.MenuItem({
		id: "menu_change_gemeinde",
		label: "Gemeinde",
		style:"display:none;",
		onClick: changeCity
	});
	menu_change.addChild(menu_change_gemeinde);
	var menu_change_lage = new dijit.MenuItem({
		id: "menu_change_lage",
		style:"display:none;",
		label: "Lage",
		onClick: changeLage
	});
	menu_change.addChild(menu_change_lage);
	var menu_change_text = new dijit.MenuItem({
		id: "menu_change_text",
		style:"display:none",
		label: "Text",
		onClick: prepareChangeText
	});
	menu_change.addChild(menu_change_text);
	var changebuttons = new dijit.form.DropDownButton({
		id: "changebuttons",
		label: "Ändern",
		style:"display:none;",
		name: "changebuttons",
		dropDown: menu_change,
		optionsTitle: 'Ändern',
		showLabel: true
	});
	var s2 = new dijit.ToolbarSeparator({
		id: "s2",
		style:"display:none;"
	});
	toolBar1.addChild(changebuttons, 2);
	toolBar1.addChild(s2, 3);
	//Admin
	if(isAdmin(activity)){
		var menu_statistik = new dijit.Menu({
		id: "menu_statistik",
		style: "display: none;"
		});
		var statistik_logfile = new dijit.MenuItem({
			id: "statistik_logfile",
			label: "Logfile",
			style: "display: none;",
			onClick: showLogFile
		});
		menu_statistik.addChild(statistik_logfile);
		
		var userSubMenu = new dijit.Menu({
			id:"user_admin"
		});
		userSubMenu.addChild(new dijit.MenuItem({
			label: "Anlegen",
			onClick: showUserCreate
		}));
		userSubMenu.addChild(new dijit.MenuItem({
			label: "Passwort",
			onClick: showUserPW
		}));
		userSubMenu.addChild(new dijit.MenuItem({
			label: "Berechtigung",
			onClick: showUserAuth
		}));
		userSubMenu.addChild(new dijit.MenuItem({
			label: "Anzeigen",
			onClick: showUserDialog
		}));
		
		menu_statistik.addChild(new dijit.PopupMenuItem({
			id:"user_menu",
			style: "display: none;",
			label: "Benutzer",
			popup: userSubMenu
		}));
		
		var statistik_winzer = new dijit.MenuItem({
			id: "statistik_winzer",
			label: "Winzer",
			style: "display: none;",
			onClick: statistikWinzer
		});
		menu_statistik.addChild(statistik_winzer);
		
		var admin = new dijit.form.DropDownButton({
			id: "admin",
			style: "display: none;",
			label: "Administration",
			dropDown: menu_statistik,
			optionsTitle: 'Ändern',
			showLabel: true
		});
		var s3 = new dijit.ToolbarSeparator({
			id: "s3",
			style: "display: none;"
		});
		toolBar1.addChild(admin, 6);
		toolBar1.addChild(s3, 7);
	}
	menuCreated=true;
	disableMenu();
}

/*
 **************************** Logon *******************************************
 */

function showDialogLogOn() {
	var d = dijit.byId("dialog_login");
	if (d != null) {
		dijit.byId("pwd").set('value',"");
		d.show();
		// done
	} else {
		// create
		d = new dijit.Dialog({
			id: "dialog_login",
			title: "Anmeldung"
		},
		document.createElement("div"));
		//dojo.style(d.closeButtonNode, "visibility", "hidden");
		var f = new dijit.form.Form({
			id: "login_form",
			method: "POST"
		},
		document.createElement("form"));
		dojo.connect(f.domNode, "onsubmit",
		function(e) {
			dojo.stopEvent(e);
			console.log("FormEvent", arguments, e);
			if (dijit.byId("login_form").validate()) {
				logOn("login_form");
				d.hide();
			}
		});
		var user = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		var userLabel = dojo.create("label", {
			'for': "user"
		});
		userLabel.innerHTML = "Benutzer";
		user.appendChild(userLabel);
		var userInput = new dijit.form.ValidationTextBox({
			required: true,
			trim: true,
			name: "user",
			id: "user"
		},
		document.createElement("input"));
		user.appendChild(userInput.domNode);
		var pw = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		var pwLabel = dojo.create("label", {
			'for': "pwd"
		});
		pwLabel.innerHTML = "Passwort";
		pw.appendChild(pwLabel);
		var pwInput = new dijit.form.ValidationTextBox({
			required: "true",
			trim: "true",
			type: "password",
			name: "pwd",
			id: "pwd"
		});
		pw.appendChild(pwInput.domNode);

		var sessInput = new dijit.form.TextBox({
			name: "temp_sess",
			id: "temp_sess",
			type: "hidden"
		});
		f.domNode.appendChild(sessInput.domNode);

		var br = dojo.create("br");
		f.domNode.appendChild(br);

		var b = new dijit.form.Button({
			type: "submit",
			label: "Anmelden"
		});
		f.domNode.appendChild(b.domNode);
		var a = new dijit.form.Button({
			type: "",
			label: "Abbrechen",
			onClick: closeDialogLogOn
		});
		f.domNode.appendChild(a.domNode);
		var statDiv = document.createElement("div");
		statDiv.appendChild(f.domNode);
		//statDiv.appendChild(b.domNode);
		d.set('content',statDiv);
	}
	d.show();
}

function closeDialogLogOn(){
	var d = dijit.byId("dialog_login");
	d.hide();
}

function logOn(form_id) {
	console.log("log on");
	var user = dijit.byId("user").get('value');
	var passwd = dijit.byId("pwd").get('value');
	dojo.xhrPost({
		url: "../cgi-bin/ajax/get_intermediate_session.cgi",
		handleAs: "json",
		content: {
			user: user
		},
		load: function(response, ioArgs) {
			console.log("Temporäre Session Id gelesen ", response.Session, ioArgs);
			dojo.byId("temp_sess").value = response.Session;

			var password_enc1 = hexMD5(user + passwd);
			console.log("verschlüsselt (1): " + password_enc1);
			var password_enc2 = hexMD5(password_enc1 + response.Session);
			console.log("verschlüsselt (2): " + password_enc2);
			dojo.byId("pwd").value = password_enc2;

			// Send user + password (encrypted) + session ID	
			dojo.xhrPost({
				url: "../cgi-bin/ajax/login.cgi",
				handleAs: "json",
				form: dojo.byId(form_id),
				load: function(response, ioArgs) {
					console.log("Login called ", response, ioArgs);
					// clear form and set sessionid
					sessionid = response.sessionid;
					dojo.cookie('sessionid',"");
					if (sessionid != "") {
						// showMessage(response.message1);
						dijit.byId("login").set('label', "Abmelden");
						dojo.cookie('sessionid',sessionid);
						// adopt menu entries according to authorized activities
						createMenu(response.activity);
						displayMenu(response.activity);
						enableAllMenu();
					} else {
						console.log(response.message1);
						showDialog(response.message1);
					}
					//??? dijit.byId("pwd").set('value',"");
					//??? dijit.byId("user").set('value',"");
					console.log("SID", sessionid);
					return response;
				},
				error: function(response, ioArgs) {
					console.log("Fehler beim Login", response, ioArgs);
					dijit.byId("pwd").set('value', "");
					showDialog(response.responseText);
					sessionid = "";
					dojo.cookie('sessionid',"");
					return response;
				}
			});
		},
		error: function(response, ioArgs) {
			console.log("Fehler beim Login (intermediate Session ID)", response, ioArgs);
			showDialog(response.responseText);
			return response;
		}
	});
}

function logOff() {
	console.log("log off");
	sessionid = "";
	dojo.cookie('sessionid', '', {expires: -1});
	dijit.byId("login").set('label', "Anmelden");
	dijit.byId("pane_maintain").selectChild(dijit.byId("pane_empty"));
	hideMenu();
	enableAllCombo();
	enableAllMenu();
}

/*
 * load allowed acctivities (for user who is logged on - using sessionid)
 */
function loadListeActivities(sessionid) {
	var activities = new Array();
	if (sessionid==""){return activities}
	dojo.xhrGet({
		url: "../cgi-bin/ajax/load_liste_activities.cgi?sessionid="+sessionid,
		handleAs: "json",
		sync: true,
		load:	function(response, ioArgs) {
						console.log("Liste SIDs", response, ioArgs);
						// clear form and set sessionid
						sessionid = response.sessionid;
						if (sessionid != "") {
							activities = response.activity;
						} else {
							showDialog(response.message1);
						}
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Laden Activities", response, ioArgs);
							return response;
						}
	});
	return activities;
}

function isAdmin(activity){
	var admin=false;
	dojo.forEach(activity , function(activity) {
		switch (activity) {
			case 1:
				break;
			case 2:
				break;
			case 3:
			case 4:
			case 5:
				admin=true;
				break;
		}
	});
	return admin;
}

/*
 * show menu entries according to authorizations
 */
function displayMenu(activity) {
	console.log("autorized for activity",activity);
	dojo.forEach(activity , function(activity) {
		switch (activity) {
			case 1:
				// Doku
				dojo.style("s2","display","");
				dojo.style(dijit.byId("changebuttons").domNode,"display","");
				try {
				dojo.style("menu_change_text","display","");
				} catch (e) {
					console.error(e);
				}
			break;
			case 2:
				// Anlegen und Ändern
				dojo.style("s1","display","");
				dojo.style("s2","display","");
				dojo.style(dijit.byId("createbuttons").domNode,"display","");
				dojo.style(dijit.byId("changebuttons").domNode,"display","");
				try {
					dojo.style("menu_change_anbau","display","");
					dojo.style("menu_change_bereich","display","");
					dojo.style("menu_change_gemeinde","display","");
					dojo.style("menu_change_lage","display","");
				} catch (e) {
					console.error(e);
				}
				try {
					dojo.style("menu_index_lagen","display","");
				} catch (e) {
					console.error(e);
				}
				//dojo.style("s4","display","");
			break;
			case 3:
				// Display Logfile
				try {
					dojo.style("menu_statistik","display","");
					dojo.style("statistik_logfile","display","");
					dojo.style("s1","display","");
					dojo.style("s2","display","");
					dojo.style("s3","display","");
				} catch (e) {
					console.error(e);
				}
 			break;
			case 4:
				// Display Winzer
				try {
					dojo.style("menu_statistik","display","");
					dojo.style("statistik_winzer","display","");
					dojo.style("s1","display","");
					dojo.style("s2","display","");
					dojo.style("s3","display","");
				} catch (e) {
					console.error(e);
				}
			case 5:
			  // Display User administration
				try {
					if(dijit.byId("admin")){
						dojo.style(dijit.byId("admin").domNode,"display","");
					}
					dojo.style("menu_statistik","display","");
					dojo.style("user_menu","display","");
					dojo.style("s1","display","");
					dojo.style("s2","display","");
					dojo.style("s3","display","");
				} catch (e) {
					console.error(e);
				}
			break;
		}
	});
}

/*
 * hide all menu entries that must be adopted according authorizations
 */
function hideMenu() {
	dojo.style(dijit.byId("createbuttons").domNode,"display","none");
	dojo.style(dijit.byId("changebuttons").domNode,"display","none");
	// change single change buttons
	try {
		dojo.style("menu_change_anbau","display","none");
		dojo.style("menu_change_bereich","display","none");
		dojo.style("menu_change_gemeinde","display","none");
		dojo.style("menu_change_lage","display","none");
		dojo.style("menu_change_text","display","none");
	} catch (e) {
		console.error(e);
	}
	try {
		if(dijit.byId("admin")){
			dojo.style(dijit.byId("admin").domNode,"display","none");
		}
		if(dojo.byId("s1")){ dojo.style("s1","display","none"); }
		if(dojo.byId("s2")){ dojo.style("s2","display","none"); }
		if(dojo.byId("s3")){ dojo.style("s3","display","none"); }
	} catch (e) {
		console.error(e);
	}
}

/*
 **************************** admin ***************************************
 */
function showLogFile(){
	var d = dijit.byId("dialog_statistic_logfile");
	if (d==null){
		d = new dijit.Dialog({
			id: "dialog_statistic_logfile",
			title: "Logifle auswerten"
		},
		document.createElement("div"));
		var c = dijit.layout.ContentPane({
			// style: "height:250px; width:500px;"
		});
		var h = dojo.create("b",{innerHTML:"Selektionen"},c.domNode);
		// User
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var logFileUser = dojo.create("label", {
			'for': "ta_passwd_reset_user"
		},c1);
		logFileUser.innerHTML = "Benutzer";
		var store_user = new dojo.data.ItemFileReadStore(
				{ url: "../cgi-bin/ajax/load_f4_user.cgi",
				  urlPreventCache:true});
		var userSelect = new dijit.form.ComboBox({
			id: "logfile_user",
			store: store_user
			//searchAttr: "bezeichnung"
		}, dojo.create("select",null,c1));
		// date from
		var c2 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var logFileFromDate = dojo.create("label", {
			'for': "logfile_from"
		},c2);
		logFileFromDate.innerHTML = "von";
		var fromdate = new Date();
		fromdate.setDate(fromdate.getDate()-1);
		var dFrom = new dijit.form.DateTextBox({id:"logfile_from",value:fromdate});
		c2.appendChild(dFrom.domNode);
		// date to
		var c3 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var logFileToDate = dojo.create("label", {
			'for': "logfile_to"
		},c3);
		logFileToDate.innerHTML = "bis";
		var dTo = new dijit.form.DateTextBox({id:"logfile_to",value:new Date()});
		c3.appendChild(dTo.domNode);
		// type
		var c4 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var logFileTypeLabel = dojo.create("label", {
			'for': "logfile_type"
		},c4);
		logFileTypeLabel.innerHTML = "Typ";
		var store_logfile_type = new dojo.data.ItemFileReadStore(
				{ url: "../cgi-bin/ajax/load_f4_logfile_type.cgi" });			
		var typSelect = new dijit.form.ComboBox({
			id: "logfile_type",
			store: store_logfile_type
			//searchAttr: "bezeichnung"
		}, dojo.create("select",null,c4));
		typSelect.labelAttr = "name";
		typSelect.searchAttr = "id";
		
		// text area
		var c5 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		/*var textLabel = dojo.create("label", {
			'for': "ta_logfile"
		},c5);
		textLabel.innerHTML = "Freitext";*/
		var text = dojo.create("textarea", {
			id:"ta_logfile",
			name:"ta_logfile",
			cols:"100",
			rows:"20"
		});
		c5.appendChild(text);
		
		//buttons
		var c5 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var update = new dijit.form.Button({
			label: "Update",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: updateLogFile
		},
		document.createElement("button"));
		c5.appendChild(update.domNode);
		var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortUpdateLogFile
		},
		document.createElement("button"));
		c5.appendChild(abort.domNode);
		
		d.set('content',c.domNode);
	}
	dijit.byId("logfile_type").set('value', "");
  dijit.byId("logfile_user").set('value', "");
	updateLogFile();
	d.show();
}

function updateLogFile(){
	var logfile = 'Selektionen: ';
	var p_user = ""
	var ustore = dijit.byId("logfile_user").store;
	var uitem = dijit.byId("logfile_user").item;
	if (uitem) {
		p_user = ustore.getValue(uitem, "id");
	}
	var p_type="";
	var tstore = dijit.byId("logfile_type").store;
	var titem = dijit.byId("logfile_type").item;
	if (titem) {
		p_type = tstore.getValue(titem, "id");
	}
	var p_von  = dojo.byId("logfile_from").value;
	var p_bis  = dojo.byId("logfile_to").value;
	
	var d1 = dojo.xhrPost({
		url: "../cgi-bin/ajax/load_log.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
    sync: true,
		content: {
      user: p_user,
      type: p_type,
      from: p_von,
      to: p_bis
    },
		load:	function(response, ioArgs) {
						console.log("Logfile gelesen");
						logfile = logfile + response[0] + "\n";
						for (var i = response.length - 1; i > 0; i--) {
						    logfile = logfile + response[i] + "\n";
						}						
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Lesen des Logfile", response, ioArgs);
							show_dialog(response.responseText);
							return response;
						}
	});		
	dojo.byId("ta_logfile").value=logfile;
}

function abortUpdateLogFile(){
	dijit.byId("dialog_statistic_logfile").hide();
}

function showLinkDialog(){
	var d = dijit.byId("dialog_show_link");
	if (d==null){
		d = new dijit.Dialog({
			id: "dialog_show_link",
			title: "Link zum Einbetten"
		},
		document.createElement("div"));
		var c = dijit.layout.ContentPane({
			style: "height:570px; width:600px;"
		});
		dojo.create("b",{innerHTML:"Sie können auf die angezeigte Lage direkt verweisen:"},c.domNode);
		dojo.create("textarea",{id:"ta_code4",name:"code4",cols:"72",rows:"1"},c.domNode);
		dojo.create("br",null,c.domNode);
		c.domNode.appendChild(dojo.doc.createTextNode("oder:"));
		dojo.create("br",null,c.domNode);
		dojo.create("textarea",{id:"ta_code5",name:"code4",cols:"72",rows:"1"},c.domNode);
		dojo.create("br",null,c.domNode);
		dojo.create("br",null,c.domNode);
		dojo.create("b",{innerHTML:"HTML-Code zum Einbetten in eine Website"},c.domNode);
		dojo.create("br",null,c.domNode);
		dojo.create("textarea",{id:"ta_code",name:"code",cols:"72",rows:"4"},c.domNode);
		dojo.create("br",null,c.domNode);
		c.domNode.appendChild(dojo.doc.createTextNode("Vorschau:"));
		dojo.create("br",null,c.domNode);
		dojo.create("iframe",{id:"code_iframe",width:"425",height:"350",frameborder:"1",scrolling:"no",marginheight:"0",marginwidth:"0"},c.domNode);
		
		dojo.create("br",null,c.domNode);
		dojo.create("br",null,c.domNode);
		dojo.create("b",{innerHTML:"Alternative bei Problemen mit einigen HTML Editoren:"},c.domNode);
		dojo.create("br",null,c.domNode);
		
		c.domNode.appendChild(dojo.doc.createTextNode("1. Fügen Sie folgendes Coding innerhalb des HEAD-Tags ein:"));
		dojo.create("br",null,c.domNode);
		dojo.create("textarea",{id:"ta_code1",name:"code1",cols:"72",rows:"7"},c.domNode);
		dojo.create("br",null,c.domNode);
		
		c.domNode.appendChild(dojo.doc.createTextNode("2. Erweitern Sie den BODY-Tag um eine onload Funktion:"));
		dojo.create("br",null,c.domNode);
		dojo.create("textarea",{id:"ta_code2",name:"code2",cols:"72",rows:"2"},c.domNode);
		dojo.create("br",null,c.domNode);
		
		c.domNode.appendChild(dojo.doc.createTextNode("3. Platziern Sie das IFRAME-Tag an die geeignete Stelle:"));
		dojo.create("br",null,c.domNode);
		dojo.create("textarea",{id:"ta_code3",name:"code3",cols:"72",rows:"3"},c.domNode);
		dojo.create("br",null,c.domNode);
		
		c.domNode.appendChild(dojo.doc.createTextNode("Diese dynamische Variante hindert den Composer, die Quelle zu interpretieren und die enthaltene Datei dojo.js mit hochladen zu wollen. Leider kann daher der Composer die Seite auch nicht lokal anzeigen, lediglich der Rahmen wird lokal sichtbar."));
		dojo.create("br",null,c.domNode);
		
		var abort = new dijit.form.Button({
			label: "Schließen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortLinkDialog
		},
		document.createElement("button"));
		
		var nl = dojo.NodeList(c.domNode,abort.domNode);
		d.set('content',nl);
		
	}
	showLink();
	d.show();
}

function abortLinkDialog(){
	dijit.byId("dialog_show_link").hide();
}

// show dialiog with link example for copy
function showLink() {
	var url = location.protocol+'//'+location.host;
	if (location.port !="") {url = url+':'+location.port}
	url=url+'/weinlage.html?lage_id='+data.lageID;	
	var code = 
	'<iframe width="425" height="350" frameborder="1" scrolling="no"\n' +
	'marginheight="0" marginwidth="0"\n' + 
   'src="http://www.weinlagen-info.de/weinlage.html?lage_id=' +data.lageID
	 +'">\n</iframe>';
	 var code1 =
	 '<script language="JavaScript" type="text/javascript">\n' +
   'function ifr_load() {\n' +
   'var str_iframe="http://www.weinlagen-info.de/weinlage.html?lage_id=' + data.lageID + '"\n' +
   'var objFrame=document.getElementById("weinlagen");\n' +
   'objFrame.src = str_iframe; }\n' +
   '</script>\n';
   var code2 = '<body onload="ifr_load()">';
   var code3 = 
   '<iframe id="weinlagen" name="weinlagen" width="425" height="350"\n' +
   'frameborder="1" scrolling="no" marginheight="0" marginwidth="0">\n' + 
   '</iframe>';
	var code4 = 'http://www.weinlagen-info.de/#lage_id=' + data.lageID;
	var thisLage="";
	data.lageStore.fetchItemByIdentity({
		identity:data.lageID,
		onItem: function(item){
			thisLage = thisLage+data.lageStore.getValues(item, "lage_lang");
		}
	});
	var thisLage = thisLage.replace(/\s/g,"+");
	var code5 = 'http://www.weinlagen-info.de/?for='+thisLage;
	dojo.byId("ta_code").value=code;
	dojo.byId("ta_code1").value=code1;
	dojo.byId("ta_code2").value=code2;
	dojo.byId("ta_code3").value=code3;
	dojo.byId("ta_code4").value=code4;
	dojo.byId("ta_code5").value=code5;
	dojo.byId("code_iframe").src = url;
	dijit.byId("dialog_show_link").show();
}

/*
 **************************** User Admin ***************************************
 */
function showUserCreate(){
	var d = dijit.byId("dialog_user_create");
	if (d==null){
		d = new dijit.Dialog({
			id: "dialog_user_create",
			title: "Benutzer anlegen"
		},
		document.createElement("div"));
		var c = dijit.layout.ContentPane({
			 style: "height:200px; width:300px;overflow:auto"
		});
		var h1 = dojo.create("b",{innerHTML:"Benutzer anlegen:"},c.domNode);
		// Name
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var userLabel = dojo.create("label", {
			'for': "ta_user_anlegen_user"
		},c1);
		userLabel.innerHTML = "Benutzer";
		var userInput = new dijit.form.ValidationTextBox({
			required: true,
			trim: true,
			name: "ta_user_anlegen_user",
			id: "ta_user_anlegen_user",
			placeHolder: "Benutzername"
		},
		document.createElement("input"));
		c1.appendChild(userInput.domNode);
		// Passwort
		var c2 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var userPWLabel = dojo.create("label", {
			'for': "ta_user_anlegen_passwd"
		},c2);
		userPWLabel.innerHTML = "Passwort";
		var userPW = new dijit.form.ValidationTextBox({
			required: true,
			trim: true,
			name: "ta_user_anlegen_passwd",
			id: "ta_user_anlegen_passwd",
			placeHolder: "Passwort"
		},
		document.createElement("input"));
		c2.appendChild(userPW.domNode);
		// E-Mail
		var c3 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var userEmailLabel = dojo.create("label", {
			'for': "ta_user_anlegen_email"
		},c3);
		userEmailLabel.innerHTML = "E-Mail";
		var userEMail = new dijit.form.ValidationTextBox({
			required: true,
			trim: true,
			name: "ta_user_anlegen_email",
			id: "ta_user_anlegen_email",
			placeHolder: "name@email.com"
		},
		document.createElement("input"));
		c3.appendChild(userEMail.domNode);
		//infos
		var c4 = dojo.create("div", {
			'class': "formrow",
			style: "height: 85px"
		},
		c.domNode);
		dojo.create("label", {
			'for': "ta_user_anlegen_infos",
			innerHTML: "Infos"
		},
		c4);
		var dive = dojo.create("div", {
			style: "border: 1px solid #8BA0BD;width:181px;float: left"
		},
		c4);
		var plugins = new Array("bold", "italic", "underline", "|", "insertOrderedList", "createLink");
		var infosEditor = new dijit.Editor({
			'height': "60px",
			'name': "ta_user_anlegen_infos",
			'id': "ta_user_anlegen_infos",
			'plugins': plugins
		},
		dojo.create("div",null,dive));
		// Buttons
		var c5 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var createUser = new dijit.form.Button({
			label: "Anlegen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: createNewUser
		},
		document.createElement("button"));
		c5.appendChild(createUser.domNode);
		var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortCreateUser
		},
		document.createElement("button"));
		c5.appendChild(abort.domNode);
		
		d.set('content',c.domNode);
	}
	dijit.byId("ta_user_anlegen_user").set('value',"");
	dijit.byId("ta_user_anlegen_passwd").set('value',"");
	dijit.byId("ta_user_anlegen_email").set('value',"");
	dijit.byId("ta_user_anlegen_infos").set('value',"");
	d.show();
}

function abortCreateUser(){
	dijit.byId("dialog_user_create").hide();
}

function showUserPW(){
	var d = dijit.byId("dialog_user_pw");
	var store_user = new dojo.data.ItemFileReadStore(
				{ url: "../cgi-bin/ajax/load_f4_user.cgi",
				  urlPreventCache:true});
	if (d==null){
		d = new dijit.Dialog({
			id: "dialog_user_pw",
			title: "Passwort zurücksetzen"
		},
		document.createElement("div"));
		var c = dijit.layout.ContentPane({
			 style: "height:100px; width:300px;overflow:auto"
		});
		var h2 = dojo.create("b",{innerHTML:"Passwort zurücksetzen:"},c.domNode);
		// Benutzer
		var c6 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var resetUserLabel = dojo.create("label", {
			'for': "logfile_user"
		},c6);
		resetUserLabel.innerHTML = "Benutzer";
		var resetUser = new dijit.form.ComboBox({
			id: "ta_passwd_reset_user",
			placeHolder: "Benutzer auswählen",
			store: store_user
			//searchAttr: "bezeichnung"
		}, dojo.create("select",null,c6));
		// Passwort
		var c7 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var userPWLabelNew = dojo.create("label", {
			'for': "ta_passwd_reset_passwd"
		},c7);
		userPWLabelNew.innerHTML = "Passwort";
		var userPWNew = new dijit.form.ValidationTextBox({
			required: true,
			trim: true,
			name: "ta_passwd_reset_passwd",
			id: "ta_passwd_reset_passwd",
			placeHolder: "Passwort"
		},
		document.createElement("input"));
		c7.appendChild(userPWNew.domNode);
		// Buttons
		var c8 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var resetPW = new dijit.form.Button({
			label: "Neu setzten",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: resetPassword
		},
		document.createElement("button"));
		c8.appendChild(resetPW.domNode);
		
		var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortResetPW
		},
		document.createElement("button"));
		c8.appendChild(abort.domNode);
		
		d.set('content',c.domNode);
	}
	dijit.byId("ta_passwd_reset_user").set('value',"");
	dijit.byId("ta_passwd_reset_passwd").set('value',"");
	d.show();
}

function abortResetPW(){
	dijit.byId("dialog_user_pw").hide();
}

function showUserAuth(){
	var d = dijit.byId("dialog_user_auth");
	var store_user_group = new dojo.data.ItemFileReadStore(
				{ url: "../cgi-bin/ajax/load_f4_user_berechtigung.cgi",
				  urlPreventCache:true});
	var store_group = new dojo.data.ItemFileReadStore(
				{ url: "../cgi-bin/ajax/load_f4_user_group.cgi",
				  urlPreventCache:false});
	if (d==null){
		d = new dijit.Dialog({
			id: "dialog_user_auth",
			title: "Berechtigung bearbeiten"
		},
		document.createElement("div"));
		var c = dijit.layout.ContentPane({
			 style: "height:100px; width:300px;overflow:auto"
		});
		var h3 = dojo.create("b",{innerHTML:"Berechtigung bearbeiten:"},c.domNode);
		//Benutzer
		var c9 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var authUserLabel = dojo.create("label", {
			'for': "ta_berechtigung_admin_user"
		},c9);
		authUserLabel.innerHTML = "Benutzer";
		var authUser = new dijit.form.ComboBox({
			id: "ta_berechtigung_admin_user",
			placeHolder: "Benutzer auswählen",
			store: store_user_group
			//searchAttr: "bezeichnung"
		}, dojo.create("select",null,c9));
		//Benutzer-Gruppe
		var c10 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var authUserGroupLabel = dojo.create("label", {
			'for': "ta_berechtigung_admin_gruppe"
		},c10);
		authUserGroupLabel.innerHTML = "Gruppe";
		var authUserGroup = new dijit.form.ComboBox({
			id: "ta_berechtigung_admin_gruppe",
			store: store_group
			//searchAttr: "bezeichnung"
		}, dojo.create("select",null,c10));
		//Buttons
		var c11 = dojo.create("div", {
			'class': "formrow"
		},
		c.domNode);
		var updateAuth = new dijit.form.Button({
			label: "Setzen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: updateUserAuth
		},
		document.createElement("button"));
		c11.appendChild(updateAuth.domNode);
		
		var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortUserAuth
		},
		document.createElement("button"));
		c11.appendChild(abort.domNode);
		
		d.set('content',c.domNode);
	}
	dijit.byId("ta_berechtigung_admin_user").set('value',"");
	dijit.byId("ta_berechtigung_admin_gruppe").set('value',"");
	d.show();
}

function abortUserAuth(){
	dijit.byId("dialog_user_auth").hide();
}

function createNewUser(){
	var p_user       = dijit.byId("ta_user_anlegen_user").value;	                               
	var p_password   = dijit.byId("ta_user_anlegen_passwd").value;
	var p_email      = dijit.byId("ta_user_anlegen_email").value;
	var p_infos      = dijit.byId("ta_user_anlegen_infos").value;
  var p_enc_passwd = hexMD5( p_user + p_password );	
  //close dialog
	var d = dijit.byId("dialog_user_create");
	d.hide();
	
	var d1 = dojo.xhrPost({
		url: "../cgi-bin/ajax/create_user.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
    content: {
      user: p_user,
      passwd: p_enc_passwd,
      email: p_email,
			infos: p_infos,
      sessionid: sessionid      
    },
		load:	function(response, ioArgs) {
						console.log("User anlegen");
						if (response.result == "ok") {						  				
						  showMessage("Benutzer gespeichert");	
						} else {
							showDialog("Fehler: " + response.message1);	
						}
						
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim User anlegen", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}
	});
}

function resetPassword(){
	var p_user       = dijit.byId("ta_passwd_reset_user").value;
	var p_password   = dijit.byId("ta_passwd_reset_passwd").value;
  var p_enc_passwd = hexMD5( p_user + p_password );	
	//close dialog
	var d = dijit.byId("dialog_user_pw");
	d.hide();
	var d1 = dojo.xhrPost({
		url: "../cgi-bin/ajax/reset_password.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
    content: {
      user: p_user,
      passwd_new: p_enc_passwd,
      sessionid: sessionid      
    },
		load:	function(response, ioArgs) {
						console.log("Passwort zurücksetzen");
						if (response.result == "ok") {						  				
						  showMessage("Passwort gespeichert");	
						} else {
							showDialog("Fehler: " + response.message1);	
						}						
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Passwort zurücksetzen", response, ioArgs);
							showDialog(response.responseText);
							return response;
						}
	});
}

function updateUserAuth(){
	var p_user  = dijit.byId("ta_berechtigung_admin_user").value;	      	                    
	var p_group   = dijit.byId("ta_berechtigung_admin_gruppe").value;	
	//close dialog
	var d = dijit.byId("dialog_user_auth");
	d.hide();
	var d1 = dojo.xhrPost({
		url: "../cgi-bin/ajax/set_authorization.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
    content: {
      user: p_user,
      group: p_group,
      sessionid: sessionid      
    },    
		load:	function(response, ioArgs) {
						console.log("Update Authorization");
						if (response.result == "ok") {						  				
						  showMessage("Update Berechtigung");	
						} else {
							showDialog("Fehler: " + response.message1);	
						}						
					  // Wertehilfe User / Berechtigung - Update
						var store_user_group = new dojo.data.ItemFileReadStore(
									{ url: "../cgi-bin/ajax/load_f4_user_berechtigung.cgi",
									  urlPreventCache:true});

  					dijit.byId("ta_berechtigung_admin_user").set("store", store_user_group);						
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Update authorization", response, ioArgs);
							showUialog(response.responseText);
							return response;
						}
	});			
}


/*
 * ************************** Anbaugebiet **************************************
 */

function anbauFormOnLoad(evt){
	console.log("onLoad", evt);
}

function displayAnbauForm() {
	dijit.byId("acc_container").selectChild(dijit.byId("ac1"));
	dijit.byId("pane_maintain").selectChild(dijit.byId("pane_maintain_anbau"));
	var p = dijit.byId("pane_maintain_anbau");
	//p.onLoad=anbauFormOnLoad;
	//p.set('href',"html/formAnbau.html");
	//return;
	var f = dijit.byId("form_anbau");
	if (f == null) {
		f = new dijit.form.Form({
			id: "form_anbau"
		},
		document.createElement("form"));
		dojo.create("h3",{
			id: "form_anbau_head",
			innerHTML:""
		},f.domNode);
		// country
		var c0 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "anbau_land",
			innerHTML: "Land"
		},
		c0);
		var s=dojo.create("select",{id:"anbau_land",name:"land"},c0);
		data.landStore.fetch({
			query:{id:"*"},
			onItem:function(item) {
				var id=data.landStore.getValue(item,"id");
				var name=data.landStore.getValue(item,"bezeichnung");
				if(id==data.landID) {
					dojo.create("option",{value:id,innerHTML:name,selected:true},s);
				} else {
					dojo.create("option",{value:id,innerHTML:name},s);
				}				
			}
		});
		// Bezeichnung
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "anbau_bezeichnung",
			innerHTML: "Bezeichnung"
		},
		c1);
		var bezeichnungInput = new dijit.form.ValidationTextBox({
			required: "true",
			trim: "true",
			type: "text",
			name: "bezeichnung",
			id: "anbau_bezeichnung",
			placeHolder: "Name des Anbaugebietes"
		});
		c1.appendChild(bezeichnungInput.domNode);
		// Area
		var c2 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "anbau_flaeche",
			innerHTML: "Fläche"
		},
		c2);
		var flaecheInput = new dijit.form.TextBox({
			style: "width: 5em;",
			type: "text",
			name: "flaeche",
			id: "anbau_flaeche"
		});
		c2.appendChild(flaecheInput.domNode);
		dojo.create("span", {
			innerHTML: "ha"
		},
		c2)
		// Rebsorten
		var c3 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "anbau_rebsorten",
			innerHTML: "Rebsorten"
		},
		c3);
		var rebsortenInput = new dijit.form.TextBox({
			type: "text",
			name: "rebsorten",
			id: "anbau_rebsorten"
		});
		c3.appendChild(rebsortenInput.domNode);
		// Bundesland
		var c4 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "anbau_bundesland",
			innerHTML: "Bundesland"
		},
		c4);
		var bundeslandInput = new dijit.form.TextBox({
			type: "text",
			name: "bundesland",
			id: "anbau_bundesland"
		});
		c4.appendChild(bundeslandInput.domNode);
		// Infos
		var c5 = dojo.create("div", {
			'class': "formrow",
			style: "height: 85px"
		},
		f.domNode);
		dojo.create("label", {
			'for': "anbau_infos",
			innerHTML: "Infos"
		},
		c5);
		var dive = dojo.create("div", {
			style: "border: 1px solid #8BA0BD;width:173px;float: left"
		},
		c5);
		var plugins = new Array("bold", "italic", "underline", "|", "insertOrderedList", "createLink");
		var infosEditor = new dijit.Editor({
			'height': "60px",
			'name': "infos",
			'id': "anbau_infos",
			'plugins': plugins
		},
		dojo.create("div",null,dive));
		// buttons
		createButtons(f.domNode,addAnbauPolygon,deleteAnbauPolygon,saveAnbau,abortMaintainAnbau);
		p.domNode.appendChild(f.domNode);
	}
}

function createAnbaugebiet(){
	maintain = true;
	data.display=0;
	disconnectHandles();
	dijit.byId("comboAnbau").set('value',"");
	dijit.byId("comboBereich").set('value',"");
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboLage").set('value',"");
	data.anbauID = "";
	displayAnbauForm();
	var f = dijit.byId("form_anbau");
	if (f!=null) {
		f.set('value', {
			'bezeichnung': "",
			'flaeche': "",
			'rebsorten': "",
			'bundesland': "",
			'infos': ""
		});
	}
	disableAllCombo();
	disableAllMenu();
	var h = dojo.byId("form_anbau_head");
	h.innerHTML = "Anbaugebiet anlegen";
	// add dummy entry in data.anbauShapes
	newAnbauShapes = {
		id: "",
		polyShapes: new Array()
	}
	data.anbauShapes.push(newAnbauShapes);
	// show neighbors
	dojo.forEach(data.anbauShapes, function(anbauShapes){
		// show polygon on map...
		if (data.anbauID != anbauShapes.id) {
			dojo.forEach(anbauShapes.polyShapes, function(thisShape) {
				drawShape(thisShape);
			});
		}
	});
}

function changeAnbaugebiet(){
	maintain = true;
	var item = dijit.byId("comboAnbau").get('item');
	if (item == null) {
		data.anbauStore.fetchItemByIdentity({
			identity: data.anbauID,
			onItem : function(item){
				dijit.byId("comboAnbau").item = item;
			}
		});
	}
	item = dijit.byId("comboAnbau").get('item');
	if (item == null) {
		console.error("changeAnbaugebiet: item=null")
		return;
	}
	disconnectHandles();
	disableAllCombo();
	disableAllMenu();
	displayAnbau();
	displayAnbauForm();
	dojo.byId("form_anbau_head").innerHTML = "Anbaugebiet ändern";
	var f = dijit.byId("form_anbau");
	var center = map.getCenter(); 
	if (f != null) {
		f.set('value', {
			'bezeichnung': data.anbauStore.getValue(item, "bezeichnung"),
			'flaeche': data.anbauStore.getValue(item, "flaeche"),
			'rebsorten': data.anbauStore.getValue(item, "rebsorten"),
			'bundesland': data.anbauStore.getValue(item, "bundesland"),
			'infos': data.anbauStore.getValue(item, "infos")
		});
		dojo.byId("anbau_land").value=data.anbauStore.getValue(item, "land");
	} else {
		console.error("Fehler!!!");
	}
	// show neighbors
	dojo.forEach(data.anbauShapes, function(anbauShapes){
		// show polygon on map...
		if (data.anbauID != anbauShapes.id) {
			dojo.forEach(anbauShapes.polyShapes, function(thisShape) {
				drawShape(thisShape);
			});
		}
	});
	map.closeInfoWindow();
	// do not add polygon -> only prepare editing
	enableEditing(data.anbauShapes,data.anbauID);
}

function addAnbauPolygon(){
	addPolygon(data.anbauShapes,data.anbauID);
}

function deleteAnbauPolygon(){
	deletePolygon(data.anbauShapes,data.anbauID);
}

function getAnbauContent() {
	var values = dijit.byId("form_anbau").get('value');
	console.log("values",values);
	var content = {};
	content.sessionid = sessionid;
	content.id = data.anbauID;
	content.bezeichnung = values.bezeichnung;
	var c = map.getCenter();
	content.lat = c.lat();
	content.lng = c.lng();
	content.zoom = map.getZoom();
	content.flaeche = values.flaeche;
	content.rebsorten = values.rebsorten;
	content.infos = values.infos;
	content.bundesland = values.bundesland;
	content.land_id = dojo.byId("anbau_land").value;
	dojo.forEach(data.anbauShapes,function(thisAnbauShapes){
		if (thisAnbauShapes.id == data.anbauID) {
			content.coords = polyShapesToJSON(thisAnbauShapes.polyShapes);
		}
	});
	console.log("content=",content);
	return content;
}

function saveAnbau(){
	console.log("Save Anbaugebiet");
	if (!dijit.byId("form_anbau").validate()) { return; }
	var content = getAnbauContent();
	var exit = false;
	// check name
	data.anbauStore.fetch({
		query: {bezeichnung: content.bezeichnung},
		onItem: function(item) {
			var id=data.anbauStore.getValue(item,"id");
			if(content.id!=id){
				showDialog('Anbaugebiet <b>'+content.bezeichnung+"</b> existiert schon!");
				exit = true;
			}
		}
	});
	if (exit) return;
	maintain = false;
	dojo.xhrPost({
		content: content,
		url: "../cgi-bin/ajax/save_anbau.cgi",
		handleAs: "json",
		load:	function(response, ioArgs) {
						console.log("Anbaugebiet gesichert: ", response, ioArgs);
						if (response.result != "ok") {
							showDialog(response.message1);
						} else {
							// reread store... (with new or chaned item)
							data.anbauStore = null;
							data.anbauStore = new dojo.data.ItemFileWriteStore({
								url: "../cgi-bin/ajax/load_liste_anbaugebiete.cgi?sessionid="+sessionid,
								urlPreventCache:true});
							data.anbauStore.fetch({
								query: {bezeichnung: content.bezeichnung},
								onComplete: function(items){
															map.clearOverlays();
															createAnbauShapes();
															dijit.byId("comboAnbau").set("store", data.anbauStore);
															dijit.byId("pane_maintain").selectChild(dijit.byId("pane_empty"));
															displayAnbau();							
															showMessage(response.message1);
														},
								onItem: function(item) {
													dijit.byId("comboAnbau").set('value',content.land_id+" "+content.bezeichnung);
													dijit.byId("comboAnbau").item=item;
												}
							});
						}
						enableAllCombo();
						enableAllMenu();
						connectHandles();
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Sichern Anbaugebiet", response, ioArgs);
							showDialog(response.responseText);
							enableAllCombo();
							enableAllMenu();
							connectHandles();
							return response;
						}
	});
}

function abortMaintainAnbau(){
	console.log("Abort Maintain Anbau");
	maintain = false;
	createAnbauShapes();
	displayAnbau();
	abortMaintain();
}

/*
 ****************************** Bereich ****************************************
 */
function displayBereichForm(){
	dijit.byId("acc_container").selectChild(dijit.byId("ac1"));
	dijit.byId("pane_maintain").selectChild(dijit.byId("pane_maintain_bereich"));
	var p = dijit.byId("pane_maintain_bereich");
	var f = dijit.byId("form_bereich");
	if (f==null){
		f = new dijit.form.Form({
			id: "form_bereich"
		},
		document.createElement("form"));
		dojo.create("h3",{
			id: "form_bereich_head",
			innerHTML:""
		},f.domNode);
		// Bezeichnung
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "bereich_name",
			innerHTML: "Bezeichnung"
		},
		c1);
		var bezeichnungInput = new dijit.form.ValidationTextBox({
			required: "true",
			trim: "true",
			type: "text",
			name: "name",
			id: "bereich_name",
			placeHolder: "Name des Bereichs"
		});
		c1.appendChild(bezeichnungInput.domNode);
		// buttons
		createButtons(f.domNode,addBereichPolygon,deleteBereichPolygon,saveBereich,abortMaintainBereich);
		// append form
		p.domNode.appendChild(f.domNode);
	}
}

function createBereich(){
	maintain = true;
	dijit.byId("comboBereich").set('value',"");
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboLage").set('value',"");
	data.bereichID="";data.cityID="";data.lageID="";
	clearComboBold();
	map.clearOverlays();
	data.display=1;
	disconnectHandles();
	var f=dijit.byId("form_bereich");
	if(f!=null){
		f.set('value',{
			'name':""
		})
	}
	displayBereichForm();
	disableAllCombo();
	disableAllMenu();
	dojo.byId("form_bereich_head").innerHTML="Bereich anlegen";
	newBereichShapes={
		id:"",
		polyShapes:new Array()
	}
	data.bereichShapes.push(newBereichShapes);
	
	// show neighbors
	dojo.forEach(data.bereichShapes, function(bereichShapes){
		// show polygon on map...
		if (data.bereichID != bereichShapes.id) {
			dojo.forEach(bereichShapes.polyShapes, function(thisShape) {
				drawShape(thisShape);
			});
		}
	});
	
	// show Anbaugebiet - create new... polyline...
	data.anbauStore.fetchItemByIdentity({
		identity:data.anbauID,
		onItem: function(item){
			var polygons = data.anbauStore.getValues(item, "polygons");
			var polyLines = getPolyLines (data.anbauID, polygons);
		}
	});
}

function getPolyLines(id,polygons){
	//return ...
	//TODO: Create and dispaly Anbaugebiet as Polyline
}

function changeBereich(){
	var item = dijit.byId("comboBereich").get('item');
	if (item == null) {
		return;
	}
	maintain = true;
	disconnectHandles();
	disableAllCombo();
	disableAllMenu();
	displayBereich();
	displayBereichForm();
	dojo.byId("form_bereich_head").innerHTML = "Bereich ändern";
	var f = dijit.byId("form_bereich");
	var center = map.getCenter(); 
	if (f != null) {
		f.set('value', {
			'name': data.bereichStore.getValue(item, "name")
		});
	} else {
		console.error("Fehler!!!");
	}
	showBereiche();
	//displayBereich();
	map.closeInfoWindow();
	enableEditing(data.bereichShapes,data.bereichID);
}

function addBereichPolygon(){
	addPolygon(data.bereichShapes,data.bereichID);  
}

function deleteBereichPolygon(){
	deletePolygon(data.bereichShapes,data.bereichID);
}

function getBereichContent() {
	var values = dijit.byId("form_bereich").get('value');
	console.log("values",values);
	var content = {};
	content.sessionid = sessionid;
	content.id = data.bereichID;
	content.anbau = data.anbauID;
	content.bezeichnung = values.name;
	var c = map.getCenter();
	content.lat = c.lat();
	content.lng = c.lng();
	content.zoom = map.getZoom();
	dojo.forEach(data.bereichShapes,function(thisShapes){
		if (thisShapes.id == data.bereichID) {
			content.coords = polyShapesToJSON(thisShapes.polyShapes);
		}
	});
	console.log("content=",content);
	return content;
}

function saveBereich(){
	console.log("Save Bereich");
	if (!dijit.byId("form_bereich").validate()) { return; }
	var content = getBereichContent();
	var exit = false;
	// check name
	data.bereichStore.fetch({
		query: {name: content.bezeichnung},
		onItem: function(item) {
			var id=data.bereichStore.getValue(item,"id");
			if (content.id!=id){
				showDialog("Bereich <b>"+content.bezeichnung+"</b> existiert schon!");
				exit = true;
			}
		}
	});
	if (exit) return;
	maintain = false;
	dojo.xhrPost({
		url: "../cgi-bin/ajax/save_bereich.cgi",
		handleAs: "json",
		content: content,
		load:	function(response, ioArgs) {
						console.log("Bereich gesichert: ", response, ioArgs);
						if (response.result != "ok") {
							showDialog(response.message1);
						} else {
							data.bereichStore=null;
							data.bereichStore=new dojo.data.ItemFileWriteStore({
								url: "../cgi-bin/ajax/load_liste_bereiche.cgi?dojo=true&all=true&anbau_id="+data.anbauID,
								urlPreventCache:true
							});
							data.bereichStore.fetch({
								query: {name: content.bezeichnung},
								onComplete: function(items) {
															map.clearOverlays();
															createBereicheShapes();
															dijit.byId("comboBereich").set("store", data.bereichStore);
															dijit.byId("pane_maintain").selectChild(dijit.byId("pane_empty"));
															displayBereich();
															showMessage(response.message1);
															enableAllCombo();
														},
								onItem: function(item) {
													dijit.byId("comboBereich").set('value',content.bezeichnung);
													dijit.byId("comboBereich").item = item;
												}
							});
						}
            enableAllCombo();
						enableAllMenu();
						connectHandles();
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Sichern Bereich", response, ioArgs);
							showDialog(response.responseText);
							enableAllCombo();
							enableAllMenu();
							connectHandles();
							return response;
						}
	});
	
	
}

function abortMaintainBereich(){
	console.log("Abort Maintain Bereich");
	maintain = false;
	createBereicheShapes();
	displayBereich();
	abortMaintain();
}

/*
 ************************ City ************************************************
 */
function displayCityForm(){
	dijit.byId("acc_container").selectChild(dijit.byId("ac1"));
	dijit.byId("pane_maintain").selectChild(dijit.byId("pane_maintain_city"));
	var p = dijit.byId("pane_maintain_city");
	var f = dijit.byId("form_city");
	if (f==null){
		f = new dijit.form.Form({
			id: "form_city"
		},
		document.createElement("form"));
		dojo.create("h3",{
			id: "form_city_head",
			innerHTML:""
		},f.domNode);
		// Name
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "city_name",
			innerHTML: "Name"
		},
		c1);
		var nameInput = new dijit.form.ValidationTextBox({
			required: "true",
			trim: "true",
			type: "text",
			name: "name",
			id: "gemeinde_name",
			placeHolder: "Name der Gemeinde"
		});
		c1.appendChild(nameInput.domNode);
		// buttons
		var c2 = dojo.create("div", {
			'class': "formrow"
		},f.domNode);
		var buttonSave = new dijit.form.Button({
      label: "Sichern",
			showLabel: false,
			iconClass: "dijitEditorIcon dijitEditorIconSave",
      onClick: saveCity
    },
    document.createElement("button"));
		c2.appendChild(buttonSave.domNode);
		var buttonAbort = new dijit.form.Button({
      label: "Abbrechen",
			showLabel: false,
			iconClass: "dijitEditorIcon dijitEditorIconDelete",
      onClick: abortMaintainCity
    },
    document.createElement("button"));
		c2.appendChild(buttonAbort.domNode);
		p.domNode.appendChild(f.domNode);
	}
	
}

function createCity(){
	maintain = true;
	data.display=2;
	disconnectHandles();
	dijit.byId("comboCity").set('value',"");
	dijit.byId("comboLage").set('value',"");
	data.cityID="";
	var f=dijit.byId("form_city");
	if(f!=null){
		f.set('value',{
			'name':""
		})
	}
	displayCityForm();
	disableAllCombo();
	disableAllMenu();
	dojo.byId("form_city_head").innerHTML="Gemeinde anlegen";
	newCityShapes={
		id:"",
		polyShapes:new Array()
	}
	// show neighbors...
}

function changeCity(){
	var item = dijit.byId("comboCity").get('item');
	if (item == null) {
		return;
	}
	maintain = true;
	disconnectHandles();
	disableAllCombo();
	disableAllMenu();
	displayCityForm();
	dojo.byId("form_city_head").innerHTML = "Gemeinde ändern";
	var f = dijit.byId("form_city");
	var center = map.getCenter(); 
	if (f != null) {
		f.set('value', {
			'name': data.cityStore.getValue(item, "name")
		});
	} else {
		console.error("Fehler!!!");
	}
	//TODO
	displayCity();
	// show neighbors
	
	map.closeInfoWindow();
	
	// enableEditing(Shapes,id);
	
	/*dojo.forEach(data.anbauShapes, function(thisItemShapes){
		if (thisItemShapes.id == data.BereichID) {
			dojo.forEach(thisItemShapes.polyShapes,function(thisShape){
				GEvent.clearInstanceListeners(thisShape);
				thisShape.enableEditing({onEvent: "mouseover"});
				thisShape.disableEditing({onEvent: "mouseout"});
				thisShape.setStrokeStyle({color: "red"});
			});
		}
	});*/
}

function getCityContent() {
	var values = dijit.byId("form_city").get('value');
	console.log("values",values);
	var content = {};
	content.sessionid = sessionid;
	content.bereich = data.bereichID;
	content.id = data.cityID;
	content.name = values.name;
	var c = map.getCenter();
	content.lat = c.lat();
	content.lng = c.lng();
	content.zoom = map.getZoom();
	console.log("content=",content);
	return content;
}

function saveCity(){
	console.log("Save City");
	if (!dijit.byId("form_city").validate()) { return; }
	var content = getCityContent();
	var exit = false;
	// check name
	data.cityStore.fetch({
		query: {name: content.name},
		onItem: function(item) {
			var id=data.cityStore.getValue(item,"id");
			if (id!=content.id){
				showDialog('Gemeinde <b>'+content.name+"</b> existiert schon!");
				exit = true;
			}
		}
	});
	if (exit) return;
	maintain = false;
	dojo.xhrPost({
		url: "../cgi-bin/ajax/save_gemeinde.cgi",
		handleAs: "json",
		content: content,
		load:	function(response, ioArgs) {
						console.log("Gemeinde gesichert: ", response, ioArgs);
						if (response.result != "ok") {
							showDialog(response.message1);
						} else {
							data.cityStore=null;
							loadCitiesForAnbau(); //TODO Check City Stores...
							dojo.forEach(data.cityStores,function(thisStore){
								if (thisStore.bereichID == data.bereichID) {
									data.cityStore = thisStore.store;
								}
							});
							createAnbauCityMarker();
							data.cityStore.fetch({
								query: {name: content.name},
								onComplete: function(itmes){
																map.clearOverlays();
																dijit.byId("comboCity").set("store", data.cityStore);
																dijit.byId("pane_maintain").selectChild(dijit.byId("pane_empty"));
																displayCity();
																showMessage(response.message1);
																enableAllCombo();
															},
								onItem: function(item) {
													dijit.byId("comboCity").set('value',content.name);
													dijit.byId("comboCity").item = item;
												}
							});
						}
            enableAllCombo();
						enableAllMenu();
						connectHandles();
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Sichern Gemeinde", response, ioArgs);
							showDialog(response.responseText);
							enableAllCombo();
							enableAllMenu();
							connectHandles();
							return response;
						}
	});
}

function abortMaintainCity(){
	console.log("Abort Maintain City");
	maintain = false;
	displayCity();
	abortMaintain();
}

/*
 ************************ Lage ************************************************
 */
function displayLageForm(createMode) {
	dijit.byId("acc_container").selectChild(dijit.byId("ac1"));
	dijit.byId("pane_maintain").selectChild(dijit.byId("pane_maintain_lage"));
	var p = dijit.byId("pane_maintain_lage");
	var f = dijit.byId("form_lage");
	if (f == null) {
		f = new dijit.form.Form({
			id: "form_lage"
		},
		document.createElement("form"));
		dojo.create("h3",{
			id: "form_lage_head",
			innerHTML:""
		},f.domNode);
		// Lage Name lang
		var c1 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "lage_lang",
			innerHTML: "Lage lang"
		},
		c1);
		var lageLangInput = new dijit.form.ValidationTextBox({
			//required: "true",
			trim: "true",
			type: "text",
			name: "lage_lang",
			id: "lage_lang",
			placeHolder: "Name der Lage (lang)"
		});
		c1.appendChild(lageLangInput.domNode);
		// Lage
		var c11 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "lage_edit",
			innerHTML: "Lage"
		},
		c11);
		var langInput = new dijit.form.ValidationTextBox({
			required: "true",
			trim: "true",
			type: "text",
			name: "lage_edit",
			id: "lage_edit",
			placeHolder: "Name der Lage"
		});
		c11.appendChild(langInput.domNode);
		// Area
		var c2 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "flaeche",
			innerHTML: "Fläche"
		},
		c2);
		var flaecheInput = new dijit.form.TextBox({
			style: "width: 5em;",
			type: "text",
			name: "flaeche",
			id: "flaeche"
		});
		c2.appendChild(flaecheInput.domNode);
		dojo.create("span", {
			innerHTML: "ha"
		},
		c2);
		//Berechnung Button...
		var calc = new dijit.form.Button({
			label: "Berechnen",
			showLabel: true,
			//iconClass: "dijitEditorIcon dijitEditorIconDelete",
			onClick: setCalcArea
		},
		document.createElement("button"));
		c2.appendChild(calc.domNode);	
		// Rebsorten
		var c3 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "rebsorten",
			innerHTML: "Rebsorten"
		},
		c3);
		var rebsortenInput = new dijit.form.TextBox({
			type: "text",
			name: "rebsorten",
			id: "rebsorten"
		});
		c3.appendChild(rebsortenInput.domNode);
		// Ausrichtung
		var c4 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "ausrichtung",
			innerHTML: "Ausrichtung"
		},
		c4);
		var ausrichtungInput = new dijit.form.TextBox({
			type: "text",
			name: "ausrichtung",
			id: "ausrichtung"
		});
		c4.appendChild(ausrichtungInput.domNode);
		// Neigung
		var c5 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "neigung",
			innerHTML: "Neigung"
		},
		c5);
		var neigungInput = new dijit.form.TextBox({
			style: "width: 5em;",
			type: "text",
			name: "neigung",
			id: "neigung"
			// constraints="{pattern: '#0.##',max:999}"
		});
		c5.appendChild(neigungInput.domNode);
		var s=dojo.create("select",{id:"selEinheit",name:"neigungEinheit",style:"width: 8em;"},c5);
		dojo.create("option",{value:"G",innerHTML:"° (Grad)"},s);
		dojo.create("option",{value:"P",innerHTML:"% (Prozent)",selected:true},s);
		// Boden
		var c6 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "boden",
			innerHTML: "Boden"
		},
		c6);
		var bodenInput = new dijit.form.TextBox({
			type: "text",
			name: "boden",
			id: "boden"
		});
		c6.appendChild(bodenInput.domNode);
		// Erzeuger
		var c61 = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		dojo.create("label", {
			'for': "erzeuger",
			innerHTML: "Erzeuger"
		},
		c61);
		var e = new dijit.form.Button({
			label: "Erzeuger",
			showLabel: true,
			//iconClass: "dijitEditorIcon dijitEditorIconDelete",
			onClick: showDialogAssignWeingut
		},
		document.createElement("button"));
		c61.appendChild(e.domNode);	
		// Information
		var c7 = dojo.create("div", {
			'class': "formrow",
			style: "height: 100px"
		},
		f.domNode);
		dojo.create("label", {
			'for': "infos",
			innerHTML: "Infos"
		},
		c7);
		var dive = dojo.create("div", {
			style: "border: 1px solid #8BA0BD;width:173px;float: left"
		},
		c7);
		var plugins = new Array("bold", "italic", "underline", "|", "insertOrderedList", "createLink");
		var infosEditor = new dijit.Editor({
			'height': "60px",
			'name': "infos",
			'id': "infos",
			'plugins': plugins
		},
		dojo.create("div",null,dive));
		// Slider
		var c8 = dojo.create("div", {
			'class': "formrow",
			'id': "div_trans"
		},
		f.domNode);
		dojo.create("label", {
			'for': "transparency",
			innerHTML: "Transparenz"
		},
		c8);
		var transparency=getInitialTranparency(data.lageID);
		var overlaySlider = new dijit.form.HorizontalSlider({
			id: "transparency",
			discreteValues: 11,
			value: transparency,
			minimum: 0,
      maximum: 100,
			onChange:function(value) {
				localStorage.setItem(getLageTransparencyKey(data.lageID), value);
				if (overlayTemplate) {
					overlayTemplate.setTransparency(value);
				}
			}
		}, document.createElement("div") );
		c8.appendChild(overlaySlider.domNode);	
		// Buttons
		createButtons(f.domNode,addLagePolygon,deleteLagePolygon,saveLage,abortMaintainLage,templateLage,helpLage);
		p.domNode.appendChild(f.domNode);
	}
	var id = f.domNode.id+"_template"; // do not use template during create!
	if (createMode) {
		dijit.byId(id).set("disabled",true);
	} else {
		dijit.byId(id).set("disabled",false);
	}
	dojo.style(dojo.byId("div_trans"), "visibility", "hidden");
	dijit.byId("transparency").value=getInitialTranparency(data.lageID);
}

function helpLage(){
	showHelpText(9);
}

function getInitialTranparency(lageID){
	var transparency=null;
	if (storage){
		transparency = localStorage.getItem(getLageTransparencyKey(lageID));
	}
	//default
	if (transparency)
		return transparency;
	else 
		return 50;
}

function getLageTransparencyKey(lageID){
	return "lage_"+lageID+"_transparency";
}
function getLageSWLatKey(lageID) {
	return "lage_"+lageID+"_sw_lat";
}
function getLageSWLngKey(lageID) {
	return "lage_"+lageID+"_sw_lng";
}
function getLageNELatKey(lageID) {
	return "lage_"+lageID+"_ne_lat";
}
function getLageNELngKey(lageID) {
	return "lage_"+lageID+"_ne_lng";
}

function storeOverlayBounds(lageID, boundaries) {
	if (storage){
		localStorage.setItem( getLageSWLatKey(lageID),boundaries.getSouthWest().lat() );
		localStorage.setItem( getLageSWLngKey(lageID),boundaries.getSouthWest().lng() );
		localStorage.setItem( getLageNELatKey(lageID),boundaries.getNorthEast().lat() );
		localStorage.setItem( getLageNELngKey(lageID),boundaries.getNorthEast().lng() );
	}
}

function clearOverlayStore(lageID){
	if (storage){
		localStorage.removeItem( getLageSWLatKey(lageID) );
		localStorage.removeItem( getLageSWLngKey(lageID) );
		localStorage.removeItem( getLageNELatKey(lageID) );
		localStorage.removeItem( getLageNELngKey(lageID) );
	}
}

function getOverlayBounds(lageID){
	var rectBounds;
	if (storage){
		var sw_lat_key = getLageSWLatKey(lageID);
		var sw_lat;
		var sw_lng_key = getLageSWLngKey(lageID);
		var sw_lng;
		var ne_lat_key = getLageNELatKey(lageID);
		var ne_lat;
		var ne_lng_key = getLageNELngKey(lageID);
		var ne_lng;
		
		if ( localStorage.getItem(sw_lat_key) ) {
			sw_lat = localStorage.getItem(sw_lat_key);
			if ( localStorage.getItem(sw_lng_key) ) {
				sw_lng = localStorage.getItem(sw_lng_key);
				if ( localStorage.getItem(ne_lat_key) ) {
					ne_lat = localStorage.getItem(ne_lat_key);
					if ( localStorage.getItem(ne_lng_key) ) {
						ne_lng = localStorage.getItem(ne_lng_key);
						var sw = new GLatLng(sw_lat, sw_lng);
						var ne = new GLatLng(ne_lat, ne_lng);
						rectBounds = new GLatLngBounds( sw, ne );
						return rectBounds;
					}
				}
			}
		}
	}
	// default
	var bounds = map.getBounds();
	var sw = bounds.getSouthWest();
	var ne = bounds.getNorthEast();
	var lngDelta = (ne.lng() - sw.lng()) / 4;
	var latDelta = (ne.lat() - sw.lat()) / 4;
	var nsw = new GLatLng(sw.lat() + latDelta, sw.lng() + lngDelta);
	var nne = new GLatLng(ne.lat() - latDelta, ne.lng() - lngDelta);
	rectBounds = new GLatLngBounds( nsw, nne );
	return rectBounds;
}

function showOverlay(lageID){
	var rectBounds = getOverlayBounds(lageID);
	var imgName = getImgName(lageID);
	overlayTemplate = new ProjectedOverlay(imgName, rectBounds);
	map.addOverlay(overlayTemplate);
	overlayTemplate.setTransparency(dijit.byId("transparency").value);
	
	var marker1 = new GMarker(rectBounds.getSouthWest(), {draggable: true});
  map.addOverlay(marker1);
	var marker2 = new GMarker(rectBounds.getNorthEast(), {draggable: true});
  map.addOverlay(marker2);
	GEvent.addListener(marker1, "dragend", function(latlng) {
		marker1Changed(marker2, latlng);
  });
	GEvent.addListener(marker2, "dragend", function(latlng) {
		marker2Changed(marker1, latlng);
  });
	//TODO  template Overlay
	// http://code.google.com/intl/de-DE/apis/maps/documentation/javascript/v2/reference.html
	
	//Interface "GProjection"
	//Klasse "GDraggableObject"
	
	// disable button Vorlage - no double overlays allowed
	var f = dijit.byId("form_lage");
	var id = f.domNode.id+"_template";
	dijit.byId(id).set("disabled",true);
}

function marker1Changed(marker2, latlng){
	var imgName = overlayTemplate.id;
  map.removeOverlay(overlayTemplate);
  var boundaries = new GLatLngBounds(latlng, marker2.getLatLng());
	storeOverlayBounds(data.lageID, boundaries);
  overlayTemplate = new ProjectedOverlay(imgName, boundaries);
  map.addOverlay(overlayTemplate);
	overlayTemplate.setTransparency(dijit.byId("transparency").value);
}

function marker2Changed(marker1, latlng){
	var imgName = overlayTemplate.id;
  map.removeOverlay(overlayTemplate);
  var boundaries = new GLatLngBounds(marker1.getLatLng(), latlng);
	storeOverlayBounds(data.lageID, boundaries);
  overlayTemplate = new ProjectedOverlay(imgName, boundaries);
  map.addOverlay(overlayTemplate);
	overlayTemplate.setTransparency(dijit.byId("transparency").value);
}

function templateLage() {
	var d = dijit.byId("dialog_template");
	if (d == null) {
		d = new dijit.Dialog({
			title: "Bildvorlage einblenden",
			id: "dialog_template"
		});
		var c = dijit.layout.ContentPane({
			style: "height:250px; width:500px;"
		});
		
		var c1 = dojo.create("div",{id:"left"},
												c.domNode);
		
		f = new dijit.form.Form({
			jsId: "form_upload",
			id: "form_upload",
			encType: "multipart/form-data",
			method: "post",
			action: "../cgi-bin/ajax/upload.cgi"
		},
		document.createElement("form"));
		c1.appendChild(f.domNode);
		var t = dojo.create("div",{innerHTML:"1) Wählen Sie eine Bilddatei <b>(.jpg)</b> auf Ihrem Rechner aus:"},
												f.domNode);
		dojo.create("br",null,f.domNode);
		// uploader
		var myUploader = new dojox.form.Uploader({label:"Bilddatei auswählen", multiple:false, type: "file", name: "myfile",
																		 uploadOnSelect:false, id:"uploader" });
		f.domNode.appendChild(myUploader.domNode);
		dojo.create("br",null,f.domNode);
		var sessionInput = new dijit.form.TextBox({
			required: "true",
			trim: "true",
			type: "hidden",
			name: "sessionid",
			id: "upload_sessionid"
		});
		f.domNode.appendChild(sessionInput.domNode);
		var lageId = new dijit.form.TextBox({
			required: "true",
			trim: "true",
			type: "hidden",
			name: "lage_id",
			id: "lage_id"
		});
		f.domNode.appendChild(lageId.domNode);
		
		var t = dojo.create("div",{innerHTML:"2) Ausgewählte Datei auf Weinlagen.info hochladen:"},
												f.domNode);
		dojo.create("br",null,f.domNode);
		var send = new dijit.form.Button({
			label: "Bilddatei hochladen",
			showLabel: true,
			type: "submit"
			//iconClass: "iconAddPolygon",
			//onClick: sendError
		},
		document.createElement("button"));
		f.domNode.appendChild(send.domNode);
		dojo.create("br",null,f.domNode);
		dojo.create("br",null,f.domNode);
		var list = new dojox.form.uploader.FileList({id:"files", uploaderId:"uploader"});
		f.domNode.appendChild(list.domNode);
		
		var okb = new dijit.form.Button({
			label: "Anzeigen",
			onClick: doShowOverlay
		});
		var ab = new dijit.form.Button({
			label: "Abbrechen",
			onClick: abortShowOverlay
		});
		
		var c2 = dojo.create("div",{id:"right"}, c.domNode);
		var t = dojo.create("div",{innerHTML:"3) Vorschau zeigt die verfügbare Datei:"},
												c2);
		dojo.create("img",{id:"img", src:"", heigh:"200px", width:"200px"},c2);
		
		var nl = new dojo.NodeList(c.domNode,okb.domNode,ab.domNode);
		d.set('content',nl);
		
		var form = dojo.byId("form_upload");
		dojo.connect(form, "onsubmit", function(event) {
			//Stop the submit event since we want to control form submission.
      dojo.stopEvent(event);
			console.log("Event",event);	
			var xhrArgs = {
        form: dojo.byId("form_upload"),
        handleAs: "html",
        load: function(res) {
					console.log("OK",res);
					dojo.byId("img").src = getImgName(data.lageID);
					clearOverlayStore(data.lageID);
					showMessage("Bild hochgeladen");
        },
        error: function(error) {
					console.lgo("Error",error);
					showDialog("Fehler beim Upload des Bildes");
					clearOverlayStore(data.lageID);
					dojo.byId("img").src = "";
        }
      }
			dojo.io.iframe.send(xhrArgs);
		});
	}
	dijit.byId("upload_sessionid").set('value',sessionid);
	dijit.byId("lage_id").set('value',data.lageID);
	dojo.byId("img").src = getImgName(data.lageID);
	d.show();
}

function getImgName(lageID){
	var date=new Date();
	return "img/uploads/lage_"+lageID+".jpg?"+date.getTime();
}

function doShowOverlay(){
	showOverlay(data.lageID);
	var d = dijit.byId("dialog_template");
	dojo.style(dojo.byId("div_trans"), "visibility", "visible");
	d.hide();
}

function abortShowOverlay(){
	var d = dijit.byId("dialog_template");
	d.hide();
}

function createLage(){
	maintain = true;
	data.display=3;
	disconnectHandles();
	dijit.byId("comboLage").set('value',"");
	data.lageID = "";
	var newLage = data.lageStore.newItem({
		id: "",
		lage: "",
		winzer: new Array()
	});
	var f = dijit.byId("form_lage");
	if (f!=null) {
		f.set('value', {
			'lage_lang': "",
			'lage_edit':"",
			'flaeche': "",
			'rebsorten': "",
			'ausrichtung': "",
			'neigung':"",
			'boden':"",
			'infos': ""
		});
	}
	displayLageForm(true);
	disableAllCombo();
	disableAllMenu();
	dojo.byId("form_lage_head").innerHTML = "Lage anlegen";
	// add dummy entry in data.anbauShapes
	newLageShapes = {
		id: "",
		polyShapes: new Array()
	}
	data.lageShapes.push(newLageShapes);
	// show neighbors
	dojo.forEach(data.lageShapes, function(lageShapes){
		// show polygon on map...
		if (data.lageID != lageShapes.id) {
			dojo.forEach(lageShapes.polyShapes, function(thisShape) {
				drawShape(thisShape);
			});
		}
	});
}

function changeLage(){
	var item = dijit.byId("comboLage").item;
	if (item == null) {
		return;
	}
	maintain = true;
	disconnectHandles();
	disableAllCombo();
	disableAllMenu();
	displayLageForm(false);
	dojo.byId("form_lage_head").innerHTML = "Lage ändern";
	var f = dijit.byId("form_lage");
	var center = map.getCenter(); 
	if (f != null) {
		f.set('value', {
			'lage_lang': data.lageStore.getValue(item, "lage_lang"),
			'lage_edit': data.lageStore.getValue(item, "lage"),
			'flaeche': data.lageStore.getValue(item, "flaeche"),
			'rebsorten': data.lageStore.getValue(item, "rebsorten"),
			'ausrichtung': data.lageStore.getValue(item, "ausrichtung"),
			'neigung': data.lageStore.getValue(item, "neigung"),
			'boden': data.lageStore.getValue(item, "boden"),
			'infos': data.lageStore.getValue(item, "infos")
		});
		dojo.byId("selEinheit").value=data.lageStore.getValue(item, "neigungEinheit");
	} else {
		console.error("Fehler!!!");
	}
	displayLage();
	// show neighbors
	dojo.forEach(data.lageShapes, function(lageShapes){
		// show polygon on map...
		if (data.lageID != lageShapes.id) {
			dojo.forEach(lageShapes.polyShapes, function(thisShape) {
				drawShape(thisShape);
			});
		}
	});
	map.closeInfoWindow();
	// do not add polygon -> only prepare editing
	enableEditing(data.lageShapes,data.lageID);
}

function addLagePolygon(){
	addPolygon(data.lageShapes,data.lageID);
}

function deleteLagePolygon(){
	deletePolygon(data.lageShapes,data.lageID);
}

function getLageContent() {
	var values = dijit.byId("form_lage").get('value');
	console.log("values",values);
	var content = {};
	content.sessionid = sessionid;
	content.lage = data.lageID;
	content.anbau = data.anbauID;
	content.bereich = data.bereichID;
	content.gemeinde = data.cityID;
	content.lage_edit = values.lage_edit;
	content.lage_lang = values.lage_lang;
	if(content.lage_lang==""){content.lage_lang=values.lage_edit}
	content.flaeche = values.flaeche;
	content.rebsorten = values.rebsorten;
	content.ausrichtung = values.ausrichtung;
	content.neigung = values.neigung;
	content.neigungEinheit = dojo.byId("selEinheit").value;
	content.boden = values.boden;
	data.lageStore.fetchItemByIdentity({
		identity: data.lageID,
		onItem : function(item){
			var winzerIDs=getWeingutIDs(data.lageStore,item);
			content.winzer=winzerIDs;
		}
	});
	content.infos = values.infos;
	var c = map.getCenter();
	content.lage_lat = c.lat();
	content.lage_lng = c.lng();
	content.lage_zoom = map.getZoom();
	
	dojo.forEach(data.lageShapes,function(thisLageShapes){
		if (thisLageShapes.id == data.lageID) {
			content.coords = polyShapesToJSON(thisLageShapes.polyShapes);
		}
	});
	console.log("content=",content);
	return content;
}

function saveLage(){
	console.log("Save Lage");
	if (!dijit.byId("form_lage").validate()) { return; }
	var content = getLageContent();
	var exit = false;
	// check name
	data.lageStore.fetch({
		query: {lage: content.lage_edit},
		onItem: function(item) {
			var id=data.lageStore.getValue(item,"id");
			if (id!=content.lage){
				showDialog('Lage <b>'+content.lage_edit+"</b> existiert schon!");
				exit = true;
			}
		}
	});
	if (exit) return;
	maintain = false;
	dojo.xhrPost({
		content: content,
		url: "../cgi-bin/ajax/save_lage.cgi",
		handleAs: "json",
		load:	function(response, ioArgs) {
				console.log("Lage gesichert: ", response, ioArgs);
				if (response.result != "ok") {
					showDialog(response.message1);
				} else {
					data.lageStore=null;
					data.lageStore = new dojo.data.ItemFileWriteStore({
						url: "../cgi-bin/ajax/load_liste_lagen.cgi?dojo=true&all=true&gemeinde_id="+data.cityID,
						urlPreventCache:true
					});				
					data.lageStore.fetch({
						query: {lage: content.lage_edit},
						onComplete: function(items){
													map.clearOverlays();
													createLagenShapes();
													dijit.byId("comboLage").set("store" ,data.lageStore);
													dijit.byId("pane_maintain").selectChild(dijit.byId("pane_empty"));
													displayLage();
													showMessage(response.message1);
												},
						onItem: function(item) {
											dijit.byId("comboLage").set('value',content.lage_edit);
											dijit.byId("comboLage").item = item;
										}
					});
					
				}
				enableAllCombo();
				enableAllMenu();
				connectHandles();
				return response;
			},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Sichern Lage", response, ioArgs);
							showDialog(response.responseText);
							enableAllCombo();
							enableAllMenu();
							connectHandles();
							return response;
						}
	});
}

function abortMaintainLage(){
	console.log("Abort Maintain Lage");
	maintain = false;
	createLagenShapes();
	displayLage();
	abortMaintain();
	data.lageStore.fetchItemByIdentity({
		identity: "",
		onItem:function(item){
			if (item) {
				data.lageStore.deleteItem(item);
			}
		}
	});
}

/********* Polygon for Lage *********/

function createPolygon(){
	console.log("createPolygon");
	changeLage();
	addLagePolygon();
}

/*
 ************************* Miscellaneous ***************************************
 */

function displayFAQ(){
	showDialogHref("dialog_hilfe","Hilfe und FAQ","../cgi-bin/ajax/load_faq.cgi");
}

function displayNews(){
	showDialogHref("dialog_news","News","../cgi-bin/ajax/load_text.cgi?id=3");
}

function displayLinks(){
	showDialogHref("dialog_links","Links","../cgi-bin/ajax/load_text.cgi?id=5");
}

function displaySearchHelp(){
	showDialogHref("dialog_shelp","Hilfe","../cgi-bin/ajax/load_text.cgi?id=31");
}

// error dialog...
function showDialog(message) {	
	var d = dijit.byId("show_dialog");
	if (d == null) {
		d = new dijit.Dialog({
			title: "Fehler!",
			id: 'show_dialog'
		});
	}
	var c = dijit.layout.ContentPane({style:"width:400px;height:300px"});
	var content = dojo.create("div", {
			'innerHTML': message+"<br/><br/>"
		},
		c.domNode);
	var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortShowDialog
		},
		document.createElement("button"));
	content.appendChild(abort.domNode)
	d.set('content',c.domNode);
	d.show();
}

function abortShowDialog(){
	var d = dijit.byId("show_dialog");
	d.hide();
}

function addPolygon(shapes,id) {
	dojo.forEach(shapes,function(thisShape){
		if (thisShape.id == id) {
			thisShape.polyShapes.push(newPolygon());
		}
	});
}

function newPolygon(){
	console.log("Add Polygon");
	var thisShape = new GPolygon([], "red", polygonOptions.lineWeight,
						polygonOptions.lineOpacity, polygonOptions.fillColor,
						polygonOptions.opacity, {clickable:true}
	);
	map.addOverlay(thisShape);
	var options = {};
	if (thisShape.getVertexCount() < 1) {
		// enable to draw new polygon
		thisShape.enableDrawing(options);	
	}
	thisShape.enableEditing({onEvent: "mouseover"});
	thisShape.disableEditing({onEvent: "mouseout"});
	return thisShape;
}

function enableEditing(shapes,id){
	dojo.forEach(shapes, function(thisItemShape){
		if (thisItemShape.id == id) {
			dojo.forEach(thisItemShape.polyShapes,function(thisShape){
				GEvent.clearInstanceListeners(thisShape);
				thisShape.enableEditing({onEvent: "mouseover"});
				thisShape.disableEditing({onEvent: "mouseout"});
				thisShape.setStrokeStyle({color: "red"});
			});
		}
	});
}

function deletePolygon(shapes,id){
	dojo.forEach(shapes, function(thisShapes){
		if (thisShapes.id == id) {
			deletePolygons(thisShapes.polyShapes);
		}
	});
}

function deletePolygons(polyShapes){
	console.log("Delete Polygon");
	dojo.forEach(polyShapes, function(thisShape){
		thisShape.disableEditing();
		thisShape.setStrokeStyle({color: polygonOptions.lineColor});
		GEvent.addListener(thisShape, "mouseout", function() {
			thisShape.setStrokeStyle({color: polygonOptions.lineColor});
		});
		GEvent.addListener(thisShape, "mouseover", function() {
			thisShape.setStrokeStyle({color: "blue"});
		});
		GEvent.addListener(thisShape, "click", function() {
			map.removeOverlay(thisShape);
			var index = dojo.indexOf(polyShapes, thisShape);
			polyShapes.splice(index,1);
			console.log("Polygon removed", index);
		});
	});
}


function createButtons(formNode, addPolygonFunction, deletePolygonFunction,
											 saveFunction, abortFunction, templateFunction, helpFunction){
	var d = dojo.create("div", {
		'class': "formrow"
	},
	formNode);
	var buttonAddPolygon = new dijit.form.Button({
    label: "Polygon hinzufügen",
		showLabel: false,
		iconClass: "iconAddPolygon",
     onClick: addPolygonFunction
  },
  document.createElement("button"));
	d.appendChild(buttonAddPolygon.domNode);
	var buttonDeletePolygon = new dijit.form.Button({
    label: "Polygon löschen",
		showLabel: false,
		iconClass: "iconDeletePolygon",
     onClick: deletePolygonFunction
  },
  document.createElement("button"));
	d.appendChild(buttonDeletePolygon.domNode);
	var buttonSave = new dijit.form.Button({
    label: "Sichern",
		showLabel: false,
		iconClass: "dijitEditorIcon dijitEditorIconSave",
    onClick: saveFunction
  },
  document.createElement("button"));
	d.appendChild(buttonSave.domNode);
	var buttonAbort = new dijit.form.Button({
    label: "Abbrechen",
		showLabel: false,
		iconClass: "dijitEditorIcon dijitEditorIconDelete",
    onClick: abortFunction
  },
  document.createElement("button"));
	d.appendChild(buttonAbort.domNode);
	// Template
	if (templateFunction) {
		var id = formNode.id+"_template";  // "form_lage" + ...
		var buttonTemplate = new dijit.form.Button({
			id: id,
		  label: "Vorlage",
			showLabel: true,
			//iconClass: "iconHelp",
		  onClick: templateFunction
		},
		document.createElement("button"));
		d.appendChild(buttonTemplate.domNode);
	}
	// help button
	if (helpFunction) {
		var buttonHelp = new dijit.form.Button({
		  label: "Hilfe",
			showLabel: false,
			iconClass: "iconHelp",
		  onClick: helpFunction
		},
		document.createElement("button"));
		d.appendChild(buttonHelp.domNode);
	}
}

function abortMaintain(){
	dijit.byId("pane_maintain").selectChild(dijit.byId("pane_empty"));
	enableAllCombo();
	connectHandles();
	enableAllMenu();
}

function statistikWinzer() {
	window.open('../cgi-bin/ajax/show_winzer.cgi');
}

function indexLagen() {
	window.open('../cgi-bin/ajax/show_lagen_index.cgi');
}

function showUserDialog(){
	window.open('../cgi-bin/ajax/show_user.cgi?sessionid='+sessionid);
}

function openAddressGoto(){
	var d = dijit.byId("gotoAddress");
	if (d == null) {
			d = new dijit.Dialog({
			id: "gotoAddress",
			title: "Adresse"
		},
		document.createElement("div"));
		var c = dijit.layout.ContentPane({});
		c.set('href',"html/showAddress.html");
		d.set('content',c);
	}
	d.show();
}

function showAddress(address, zoom) {
	geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        console.log("point not defined in ShowAddress");
      } else {
	      map.panTo(point);
				window.setTimeout(function() {
					map.setZoom(zoom);
				}, 1000);
      }
    }
  );
}

function prepareChangeText(){
	window.open('editor_dojo.html');
}

//calculate area of polygones that are displayed
function calcArea() {
	console.log("calculate area of polygones that are displayed");
	var fl = 0;
	dojo.forEach(data.lageShapes, function(lageShapes){
		if (data.lageID==lageShapes.id) {
			dojo.forEach(lageShapes.polyShapes, function(polyshape){
				var m=polyshape.getArea();
				var flx = m / 10000.0;
				fl = fl + dojo.number.round(flx,1);
			});
		}
	});
	return fl;
}

//Set area input field: calculated value 
function setCalcArea() {
	var area = calcArea();
	dijit.byId("flaeche").set('value',area);
}

/*
 * Weingut/Erzeuger
 */
	
// create an entry of Source
var nodeCreator = function(item) {
	var node;	
	node = dojo.doc.createElement("div");
	node.id = item.id;
	dojo.addClass(node, "dojoDndItem");
	node.appendChild(document.createTextNode(item.name));
	return {node: node, data: item, type: ["weingut"]}
}

// based on dojo.dnd.Source.checkAcceptance()
function checkAcceptanceWithoutSelfDrop(source, nodes) {
  if(this == source){ return false; }
  for(var i = 0; i < nodes.length; ++i){
    var type = source.getItem(nodes[i].id).type;
    // type instanceof Array
    var flag = false;
    for(var j = 0; j < type.length; ++j){
      if(type[j] in this.accept){
        flag = true;
        break;
      }
    }
		if(!flag){
			return false;
		}
		// check wether object is alredy member of target
		var cid = nodes[i].id;
		this.forInItems(function(item, id, map){
			if (cid == id) {
				flag = false;
			}
		});
	  if(!flag){
			return false;
		}
	}
	return true;
}


function showMaintainWeingut(){
	var id="dialog_maintain_weingut";
	var d = dijit.byId(id);
	if (d == null) {
		d = new dijit.Dialog({
			title: "Erzeuger bearbeiten",
			id: id
		});
		var f = new dijit.form.Form({
			id: "form_weingut"
		},
		document.createElement("form"));
		// id
		var idInput = new dijit.form.TextBox({
			required: "true",
			trim: "true",
			type: "hidden",
			name: "winzer_key",
			id: "weingut_id"
		});
		f.domNode.appendChild(idInput.domNode);
		// session
		var sessionInput = new dijit.form.TextBox({
			required: "true",
			trim: "true",
			type: "hidden",
			name: "sessionid",
			id: "weingut_sessionid"
		});
		f.domNode.appendChild(sessionInput.domNode);
		// name
		var name = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		var nameLabel = dojo.create("label", {
			'for': "weingut_name"
		},name);
		nameLabel.innerHTML = "Name";
		var nameInput = new dijit.form.ValidationTextBox({
			required: true,
			trim: true,
			name: "name",
			id: "weingut_name",
			placeHolder: "Name"
		},
		document.createElement("input"));
		name.appendChild(nameInput.domNode);
		//url
		var url = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		var urlLabel = dojo.create("label", {
			'for': "weingut_url"
		},url);
		urlLabel.innerHTML = "Web Adresse";
		var urlInput = new dijit.form.ValidationTextBox({
			trim: true,
			maxlength:"255",
			//regExpGen:"dojox.validate.regexp.url",  //TODO - Check URL
			invalidMessage:"Ungültige URL.  Kein http://...",
			name: "url",
			id: "weingut_url",
			placeHolder: "http://erzeuger.com"
		},
		document.createElement("input"));
		url.appendChild(urlInput.domNode);
		// buttons
		var b = dojo.create("div", {
			'class': "formrow"
		},
		f.domNode);
		var saveB = new dijit.form.Button({
			label: "Sichern",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: saveWeingut
		},
		document.createElement("button"));
		b.appendChild(saveB.domNode);
		var abort = new dijit.form.Button({
			label: "Abbrechen",
			showLabel: true,
			//iconClass: "iconAddPolygon",
			onClick: abortSaveWeingut
		},
		document.createElement("button"));
		b.appendChild(abort.domNode);
		
		d.set('content',f.domNode);
	}
}

function saveWeingut(evt){
	dojo.stopEvent(evt);
	if (dijit.byId("form_weingut").validate()) {
		save_weingut("form_weingut");
		dijit.byId("dialog_maintain_weingut").hide();
		dijit.byId("dialog_assign_weingut").show();
	}
}

function abortSaveWeingut(){
	dijit.byId("dialog_maintain_weingut").hide();
	dijit.byId("dialog_assign_weingut").show();
}

function showAssignWeingut(){
	
	var suche=dijit.byId("suche_weingut");
	
	dojo.dnd.manager().canDrop(false);
	dijit.byId("suche_weingut").set('value',"");
	dojo.connect(dojo.byId("suche_weingut"), "onkeyup", searchWeingutEvt);
	
	dojo.byId("weingut_lage").innerHTML = "";
	dndWeingutLage = new dojo.dnd.Target("weingut_lage", {creator: nodeCreator, accept: ["weingut"]});
	dndWeingutLage.checkAcceptance = checkAcceptanceWithoutSelfDrop;
	
	dojo.byId("weingut_search").innerHTML = "";
	dndWeingutSearch = new dojo.dnd.Source("weingut_search", {creator: nodeCreator, accept: ["weingut"], copyOnly: false});
	dndWeingutSearch.clearItems();
	dndWeingutSearch.checkAcceptance = checkAcceptanceWithoutSelfDrop;
	
	data.lageStore.fetchItemByIdentity({
		identity: data.lageID,
		onItem : function(item){
			var winzer = data.lageStore.getValues(item, "winzer");
			var weingutLageResult = createWeingutDnDList(winzer);
			if (weingutLageResult.length > 0) {
				dndWeingutLage.insertNodes(false, weingutLageResult);	
			}
		}
	});
}

// show Dialog that load content with href 
function showDialogAssignWeingut() {
	var id="dialog_assign_weingut";
	var d = dijit.byId(id);
	if (d == null) {
		d = new dijit.Dialog({
			title: "Erzeuger zuordnen",
			id: id
		});
		//d.onLoad=showAssignWeingut
		var c = dijit.layout.ContentPane({
			style: "height:400px; width:500px;"
		});
		//c.set('href',"html/assignWeingut.html");
		var bc = new dijit.layout.BorderContainer({
			design:"headline",
			style:"height:400px;width:500px;"
		},dojo.create("div"));
		c.domNode.appendChild(bc.domNode);
		// top
		var tp = new dijit.layout.ContentPane({
			region:"top",
			style:"height:22px"
		},dojo.create("div"));
		var searchLabel = dojo.create("label", {
			'for': "suche_weingut",
			style:"width:100px"
		},tp.domNode);
		searchLabel.innerHTML = "Suche Erzeuger";
		var sInput = new dijit.form.TextBox({id:"suche_weingut",name:"name"});
		tp.domNode.appendChild(sInput.domNode);
		// center
		var ct = new dijit.layout.ContentPane({
			region:"center",
			style:"height:150px; width:105px;",
			align:"center"
		},dojo.create("div"));
		//buttons
		var asb = new dijit.form.Button({
			label: "Zuordnen",
			style:"width:6em;",
			onClick: doAssign
		});
		ct.domNode.appendChild(asb.domNode);
		var delb = new dijit.form.Button({
			label: "Löschen",
			style:"width:6em;",
			onClick: doDelete
		});
		ct.domNode.appendChild(delb.domNode);
		var crtb = new dijit.form.Button({
			label: "Anlegen",
			style:"width:6em;",
			onClick: doCreate
		});
		ct.domNode.appendChild(crtb.domNode);
		var chgb = new dijit.form.Button({
			label: "Bearbeiten",
			style:"width:6em;",
			onClick: doChange
		});
		ct.domNode.appendChild(chgb.domNode);
		
		// left
		var l = new dijit.layout.ContentPane({
			region:"left",
			style:"width:170px"
		},dojo.create("div"));
		var ergLabel = dojo.create("label", {
			'for': "weingut_search",
			style:"width:100px"
		},l.domNode);
		ergLabel.innerHTML = "Suchergebnisse";
		var ws = dojo.create("div",{
			id:"weingut_search", "class":"dndContainer"},l.domNode);
		// right
		var r = new dijit.layout.ContentPane({
			region:"right",
			style:"width:170px"
		},dojo.create("div"));
		var erzLabel = dojo.create("label", {
			'for': "weingut_lage",
			style:"width:110px"
		},r.domNode);
		erzLabel.innerHTML = "Erzeuger der Lage";
		var ws = dojo.create("div",{
			id:"weingut_lage", "class":"dndContainer"},r.domNode);

		bc.startup();
		bc.addChild(tp);
		bc.addChild(ct);
		bc.addChild(l);
		bc.addChild(r);
		
		var okb = new dijit.form.Button({
			label: "Ok",
			onClick: doAssignWeingut
		});
		var ab = new dijit.form.Button({
			label: "Abbrechen",
			onClick: abortAssignWeingut
		});
		
		var nl = new dojo.NodeList(c.domNode,okb.domNode,ab.domNode);
		d.set('content',nl);
	}
	d.show();
	showAssignWeingut();
}

function doAssign(evt){
	console.log("do assign evt",evt);
	var list = dojo.map(dndWeingutSearch.getSelectedNodes(), function(node){
		var item = {id:0, name: ""};
		var mapitem = dndWeingutSearch.getItem(node.id);
		item.id = mapitem.data.id;
		item.name = mapitem.data.name;
		return item;
	});
	console.log(dndWeingutSearch, dndWeingutLage, list);
	if (dndWeingutLage.checkAcceptance(dndWeingutSearch, list)) {
		console.log("hier");
		dndWeingutLage.insertNodes(false, list);	
	}
	if (dndWeingutLage != null) {
		dndWeingutLage.selectNone();
	}
	if (dndWeingutSearch != null) {
		dndWeingutSearch.selectNone();
	}
}

function doDelete(evt){
	console.log("Loeschen",evt);
	if (dndWeingutSearch != null) {
		dndWeingutSearch.selectNone();
	}
	if (dndWeingutLage != null) {
		dndWeingutLage.deleteSelectedNodes();
	}
}

function doCreate(evt){
	console.log("Create",evt);
	showMaintainWeingut();
	dijit.byId("weingut_name").set('value','');
	dijit.byId("weingut_url").set('value','');
	/*
	dijit.byId("weingut_inhaber").set('value','');
	dijit.byId("weingut_kellermeister").set('','');
	dijit.byId("weingut_groesse").set('value','');
	dijit.byId("weingut_strasse").set('value','');
	dijit.byId("weingut_postleitzahl").set('value','');
	dijit.byId("weingut_email").set('value','');
	dijit.byId("weingut_telefon").set('value','');
	dijit.byId("weingut_fax").set('value','');
		 */
	dijit.byId("dialog_assign_weingut").hide();
	dijit.byId("dialog_maintain_weingut").show();
	// erst anzeigen
	dijit.byId("weingut_sessionid").set('value',sessionid);
	dijit.byId("weingut_name").focus();
	if (dndWeingutLage != null) {
		dndWeingutLage.selectNone();
	}
	if (dndWeingutSearch != null) {
		dndWeingutSearch.selectNone();
	}
}

function doChange(evt){
	//showMaintainWeingut();
	console.log("Bearbeite Weingut");
	var weingut_id = null;
	var list = dojo.map(dndWeingutLage.getSelectedNodes(), function(node){
		var item = {id:0, name: ""};
		var mapitem = dndWeingutLage.getItem(node.id);
		item.id = mapitem.data.id;
		item.name = mapitem.data.name;
		return item;
	});

	if (list.length > 0) {
		weingut_id = list[0].id;
	} else {
		var list = dojo.map(dndWeingutSearch.getSelectedNodes(), function(node){
		var item = {id:0, name: ""};
		var mapitem = dndWeingutSearch.getItem(node.id);
			item.id = mapitem.data.id;
			item.name = mapitem.data.name;
			return item;
		});
		if (list.length > 0) {
			weingut_id = list[0].id;
		}
	}
	if (weingut_id == null) {
		showMessage("Kein Erzeuger markiert");
		return;
	}
	var weingut = load_weingut(list[0].id);
	if (weingut.items.length > 0) {
		showMaintainWeingut();
		dijit.byId("weingut_id").set('value',weingut.items[0].id);
		dijit.byId("weingut_name").set('value',weingut.items[0].name);
		dijit.byId("weingut_url").set('value',weingut.items[0].url);
		/*
		dijit.byId("weingut_inhaber").set('value',weingut.items[0].inhaber);
		dijit.byId("weingut_kellermeister").set('',weingut.items[0].kellermeister);
		dijit.byId("weingut_groesse").set('value',weingut.items[0].groesse);
		dijit.byId("weingut_strasse").set('value',weingut.items[0].strasse);
		dijit.byId("weingut_postleitzahl").set('value',weingut.items[0].postleitzahl);
		dijit.byId("weingut_email").set('value',weingut.items[0].email);
		dijit.byId("weingut_telefon").set('value',weingut.items[0].telefon);
		dijit.byId("weingut_fax").set('value',weingut.items[0].fax);	
		*/
		dijit.byId("weingut_sessionid").set('value',sessionid);
	}
	dijit.byId("weingut_name").focus();
	//dojo.style(dojo.byId("dialog_maintain_weingut"), "zIndex", 2);
	dijit.byId("dialog_assign_weingut").hide();
	dijit.byId("dialog_maintain_weingut").show();
	
	if (dndWeingutLage != null) {
		dndWeingutLage.selectNone();
	}
	if (dndWeingutSearch != null) {
		dndWeingutSearch.selectNone();
	}
}

function doAssignWeingut(evt){
	console.log("do assign weingut evt",evt);
	dojo.stopEvent(evt);
	save_weingut_assignment();
	dijit.byId("dialog_assign_weingut").hide();	
}

function abortAssignWeingut(){
	dijit.byId("dialog_assign_weingut").hide();	
}

// suche Weingut
function searchWeingutEvt(evt) {
	// filter out some key events (like SHIFT, ALT, ... )
	if ( evt.keyCode == dojo.keys.SHIFT ||
			 evt.keyCode == dojo.keys.ALT || evt.keyCode == 224 ||
			 ( 34 < evt.keyCode && evt.keyCode < 45)
			) {
		return;
	}
	searchWeingut();
}
	
function searchWeingut() {
	var suche = dijit.byId("suche_weingut").get('value');
	var obj = {name: suche};
	dojo.byId("weingut_search").innerHTML = "";
	dndWeingutSearch = new dojo.dnd.Source("weingut_search", {creator: nodeCreator, accept: ["weingut"], copyOnly: false});
	dndWeingutSearch.clearItems();
	if (suche.length < 0) {
		return;
	}
	
	dojo.xhrGet({
		url: "../cgi-bin/ajax/suche_weingut.cgi",
		contentType: "application/x-www-form-urlencoded; charset=utf-8",
		handleAs: "json",
		preventCache: true,
		content: obj,
		load:	function(response, ioArgs) {
			var weingutResult = [];
			if (response.items.length > 0) {
				dojo.forEach(response.items, function(weingut) {
					var s = {id:0, name: ""};
					s.id=weingut.id;
					s.name=weingut.name;
					weingutResult.push(s);
				});
				if (weingutResult.length > 0) {
					dndWeingutSearch.insertNodes(false, weingutResult);	
				}
			} 
		},
		error:	function(response, ioArgs) {
							console.log("Fehler bei der Suche", response, ioArgs);
							show_dialog(response.responseText);
							return response;
						}
	});	
}

// load weingut synchronously
function load_weingut(weingut_id) {
	var weingut = "";
	dojo.xhrGet({
		url: "../cgi-bin/ajax/load_winzer.cgi?winzer_id="+weingut_id,
	  handleAs: "json",
		preventCache: true,
		sync: true,
		load:	function(response, ioArgs) {
						console.log("Erzeuger geladen: ", response, ioArgs);
						if (response.items.length < 1) {
							return "Keine Erzeuger gepflegt!";
						}
						weingut = response;
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Landen von Erzeuger für Lage", response, ioArgs);
							show_dialog(response.responseText);
							return response;
						}	
	});
	return weingut;
}

function check_save_weingut(form_id) {
	console.log("check aus Formular: ", form_id);
	var f=document.getElementById(form_id);
	// check fields
	if (form_id == "form_change_weingut") {
		// change: ID has to be provided
		if (f.weingut_key.value == "") {
			alert("Bitte ID für Änderung angeben");
			return false;
		}
	}
	if (f.name.value =="") {
		alert("Bitte Name angeben!");
		console.log("nicht sichern");
		return false;
	}
	if ( f.weingut_url.value != "") {
		if( f.weingut_url.value.search(/^http:/i) == -1 ) {
			// url not valid without http://
			f.weingut_url.value = "http://" + f.weingut_url.value;
		}
	}
	return true;
}


/**
 * save Weingut
 */
function save_weingut(form_id) {
	console.log("save_weingut aus Formular: ", form_id);
	if (!check_save_weingut(form_id)) {
		return;
	}
  //maintain = false;
	dojo.xhrPost({
		url: "../cgi-bin/ajax/save_winzer.cgi",
		handleAs: "json",
	  form: dojo.byId(form_id),
		load:	function(response, ioArgs) {
						console.log("Erzeuger gesichert: ", response, ioArgs);
						if (response.result != "ok") {
							showDialog(response.message1);
						} else {
							// OK
							dijit.byId("suche_weingut").set('value', dijit.byId("weingut_name").get('value') );
							// Display new selection => user has to assign new weingut
							searchWeingut();
							showMessage(response.message1);
						}
						return response;
					},
		error:	function(response, ioArgs) {
							console.log("Fehler beim Sichern Erzeuger", response, ioArgs);
							show_dialog(response.responseText);
							return response;
						}
	});
}

function save_weingut_assignment() {
	console.log("save assignment");
	dndWeingutLage.selectAll();
	var list = dojo.map(dndWeingutLage.getSelectedNodes(), function(node){
		var mapitem = dndWeingutLage.getItem(node.id);
		var item=new Array();
		item.push(mapitem.data.id);
		item.push(mapitem.data.name);
		// url is missing, but that might be ok
		return item;
	});
	data.lageStore.fetchItemByIdentity({
		identity: data.lageID,
		onItem : function(item){
			data.lageStore.setValue(item,"winzer",list);
		}
	});
}

var gotError = function(error, request){
  console.log("The request to the store failed. " +  error);
}

/*
 * Texte
 */
function readNoteStart() {
	// Get first note to customer: What to do first.
	var content = '<br /><div id="hinweis_start" name ="hinweis_start">';	
			content = content + text["hinweis_start"];
			content = content + '</div>';
  return content;	
}

function readNoteText( s_typ, bez, infos ) {
	var h = text["hinweis_no_ploygon"].replace(/&lt;1&gt;/, s_typ);
	h = h.replace(/&lt;2&gt;/, bez);
	h = h.replace(/&lt;m&gt;/, '<a href="mailto:webmaster@weinlagen-info.de">webmaster@weinlagen-info.de</a>');
	// Provide note text: Not yet any geo information maintained, please help!
  var content = '<br /><div id="hinweis_no_ploygon" name ="hinweis_no_ploygon">';
			content = content + h;
			if(infos != "") {	content = content+'<br/>'+infos; }
      content = content + '</div>';
  return content;
}

function readNoteCityText( bez ) {
	var h = text["hinweis_lagen_gemeinde"].replace(/&lt;1&gt;/, bez);
	h = h.replace(/&lt;m&gt;/, '<a href="mailto:webmaster@weinlagen-info.de">webmaster@weinlagen-info.de</a>');
	// Provide note text: Not yet any geo information maintained, please help!
  var content = '<br /><br/><div id="hinweis_lagen_gemeinde" name ="hinweis_lagen_gemeinde">';
		  content = content + h;
      content = content + '</div>';          
  return content;
}

function readFreitextHilfe() {
	// Provide note text: Search!
  var content = '<br /><div id="hinweis_suche" name ="hinweis_suche">';
			content = content + text["hinweis_suche"];
      content = content + '</div>';          
  return content;
}

function readNotePolygon() {
	// Provide note text: Not yet any geo information maintained, please help!
  var content = '<br /><div id="hinweis_polygon" name ="hinweis_polygon">';
			content = content + text["hinweis_polygon"];
      content = content + '</div>';          
  return content;
}

function readNoteLageForCity( gemeinde ) {
	var h = text["hinweis_lagen_zu_gemeinde"].replace(/&lt;1&gt;/, gemeinde);
	h = h.replace(/&lt;m&gt;/, '<a href="mailto:webmaster@weinlagen-info.de">webmaster@weinlagen-info.de</a>');
	// Provide note text: Not yet any geo information maintained, please help!
  var content = '<br /><div id="hinweis_lagen_zu_gemeinde" name ="hinweis_lagen_zu_gemeinde">';
			content = content + h;
      content = content + '</div>';          
  return content;
}
