showmapcoor = function (longitude, latitude) {
	mapoverlay.show ({ longitude: longitude, latitude: latitude });
}

showmapadr = function (zipcode, city, street) {
	mapoverlay.show ({ zipcode: zipcode, city: city, street: street });
}

hidemap = function () {
	mapoverlay.hide ();
}

mapoverlay = {
	show: function (options) {
		var width = 640;
		var height = 480;

		var divnode = document.createElement ("div");
		$(divnode).setid ("mapoverlayshade");
		$(divnode).addClassName ("overlayshade");
		$(divnode).setOuterWidth (window.getWidth ());
		$(divnode).setOuterHeight (window.getHeight ());
		$(divnode).setPosition ([0, 0]);
		$("body").appendChild (divnode);

		var divnode = document.createElement ("div");
		$(divnode).setid ("mapoverlay");
		$(divnode).setOuterWidth (640);
		$(divnode).setOuterHeight (480);
		$(divnode).setPosition  ([((window.getWidth () - 640) / 2 - 10), ((window.getHeight () - 480) / 2)]);
		$(divnode).innerHTML = '<table width="100%"><tr>' +
				'<td>' +
					'<table class="overlaytitlebar"><tr><td class="ltd"></td><td class="mtd"></td><td class="ctd"><a href="javascript:hidemap();"><img src="static/images/layout/titlebar_close.png"></a></td><td class="rtd"></td></tr></table>' +
					'<div id="mapoverlaycanvas" style="width: ' + (width - 17) + 'px; height: ' + (height - 23 - 1) + 'px;" class="overlaycontent"></div>' +
				'</td>' +
				'<td class="shadow_r"><img src="static/images/layout/shadow_r1.png"></td>' +
			'</tr><tr>' +
				'<td class="shadow_b"><img src="static/images/layout/shadow_b1.png"></td>' +
				'<td class="shadow_br"><img src="static/images/layout/shadow_br.png"></td>' +
			'</tr></table>';
		$("body").appendChild (divnode);
		Event.observe (window, "keydown", mapoverlay.onKeyDown);

		if (GBrowserIsCompatible ()) {
			var map = new GMap2 ($("mapoverlaycanvas"));
			map.setCenter (new GLatLng (51, 9), 5);
			map.setMapType (G_HYBRID_MAP);
			map.addControl (new GMapTypeControl ());
			map.addControl (new GLargeMapControl ());

			if (options.longitude != undefined && options.latitude != undefined) {
				map.setCenter (new GLatLng (options.latitude, options.longitude), 6);
				var home = new GLatLng (options.latitude, options.longitude);
				map.addOverlay (new GMarker (home));
			} else {
				var address = options.street + ", " + options.zipcode + " " + options.city + ", Germany";
				var geocoder = new GClientGeocoder ();
				geocoder.getLatLng (
					address,
					function (point) {
						if (point) {
							map.setCenter (point, 6);
							map.addOverlay (new GMarker (point));
						}
					}
				);
			}
		}
	},

	onKeyDown: function (e) {
		if (e.keyCode == 27) mapoverlay.hide ();
	},

	hide: function () {
		$("mapoverlay").remove ();
		$("mapoverlayshade").remove ();
	}
}




showinfo = function (text) {
	hideinfo ();
	infooverlay.show (text);
}

hideinfo = function () {
	if ($("infooverlay")) infooverlay.hide ();
}

infooverlay = {
	show: function (text) {
		var divnode = document.createElement ("div");
		$(divnode).setid ("infooverlay");
		if (!navigator.isIE ()) {
			$(divnode).innerHTML = '<table><tr>' +
					'<td>' +
						'<div id="infooverlaycontent">' + text + '</div>' +
					'</td>' +
					'<td class="shadow_r"><img src="static/images/layout/shadow_r1.png"></td>' +
				'</tr><tr>' +
					'<td class="shadow_b"><img src="static/images/layout/shadow_b1.png"></td>' +
					'<td class="shadow_br"><img src="static/images/layout/shadow_br.png"></td>' +
				'</tr></table>';
		} else {
			$(divnode).innerHTML = '<table><tr>' +
					'<td>' +
						'<div id="infooverlaycontent">' + text + '</div>' +
					'</td>' +
				'</tr></table>';
		}
		$(divnode).style.visibility = "hidden";
		$("body").appendChild (divnode);
		Event.observe (document, "mousemove", infooverlay.onMouseMove);
	},

	onMouseMove: function (e) {
		var offset = 10;
		var x = Event.pointerX (e);
		var y = Event.pointerY (e);
		if ((x + $("infooverlay").getOuterWidth ()) > (window.getWidth () - offset)) x = (window.getWidth () - $("infooverlay").getOuterWidth () - offset);
		if ((y + $("infooverlay").getOuterHeight ()) > (window.getHeight () - offset)) y = (window.getHeight () - $("infooverlay").getOuterHeight () - offset);
		$("infooverlay").style.left = (x + offset) + "px";
		$("infooverlay").style.top = (y + offset) + "px";
		$("infooverlay").style.visibility = "visible";
	},

	hide: function () {
		Event.stopObserving (document, "mousemove", infooverlay.onMouseMove);
		$("infooverlay").remove ();
	}
}




showform = function (url, title) {
	formoverlay.show (url, title);
}

hideform = function () {
	formoverlay.hide ();
}

hideform2 = function () {
	formoverlay.hide2 ();
}

resizeform = function () {
	formoverlay.resize ();
}

showconfirm = function (posturl, title, text) {
	formoverlay.show (undefined, title, { type: "confirm", posturl: posturl, text: text, dimensions: [600, 0] });
}

showdelconfirm = function (posturl, title, text) {
	formoverlay.show (undefined, title, { type: "delconfirm", posturl: posturl, text: text, dimensions: [600, 0] });
}

formoverlay = {
	show: function (url, title, options) {
		if (title == undefined) title = "";

		// ---------- no formoverlay in DOM
		if (!$("formoverlay") || options == undefined || (options.type != "confirm" && options.type != "delconfirm")) {
			if (options == undefined || options.posturl == undefined || !options.posturl) {
				var mode = "normal";
				var innerText = '';
			} else {
				if (options.type == "confirm") {
					var mode = "confirm";
					var innerText = '<form name="confirmform" action="javascript:void(0);" onsubmit="postForm (\'' + options.posturl + '\', { form: this, element: \'dialog\' }); return false;" class="widget form">' +
							'<div class="dialogtext"><img src="static/images/icons/note.png" class="icon" /> <b>' + options.text + '</b></div>' +
							'<div class="buttonbar">' +
								'<button type="submit"><img src="static/images/icons/ok.png" alt="" class="icon" /><br />Ok</button>' +
								'<button type="button" onclick="hideform ();"><img src="static/images/icons/cancel.png" alt="" class="icon" /><br />Abbrechen</button>' +
							'</div>' +
						'</form>';
				} else if (options.type == "delconfirm") {
					var mode = "delconfirm";
					var innerText = '<form name="confirmform" action="javascript:void(0);" onsubmit="postForm (\'' + options.posturl + '\', { form: this, element: \'dialog\' }); return false;" class="widget form">' +
							'<div class="dialogtext"><img src="static/images/icons/note.png" class="icon" /> <b>' + options.text + '</b></div>' +
							'<div class="buttonbar">' +
								'<button type="submit"><img src="static/images/icons/ok.png" alt="" class="icon" /><br />Ok</button>' +
								'<button type="button" onclick="hideform ();"><img src="static/images/icons/cancel.png" alt="" class="icon" /><br />Abbrechen</button>' +
							'</div>' +
						'</form>';
				}
			}

			if (!navigator.isIE ()) {
				this.hormod = 7;
				var text = '<table width="100%"><tr>' +
						'<td>' +
							'<table class="overlaytitlebar"><tr><td class="ltd"></td><td class="mtd">' + title + '</td><td class="ctd"><a href="javascript:hideform();"><img src="static/images/layout/titlebar_close.png"></a></td><td class="rtd"></td></tr></table>' +
							'<div class="overlaycontent" id="formoverlaycontent" style="max-height: ' + (window.getHeight () - 160 - 23 - 1) + 'px;"><div id="form">' + innerText + '</div></div>' +
						'</td>' +
						'<td class="shadow_r"><img src="static/images/layout/shadow_r1.png"></td>' +
					'</tr><tr>' +
						'<td class="shadow_b"><img src="static/images/layout/shadow_b1.png"></td>' +
						'<td class="shadow_br"><img src="static/images/layout/shadow_br.png"></td>' +
					'</tr></table>';
			} else {
				this.hormod = 0;
				var text = '<table width="100%"><tr>' +
						'<td>' +
							'<table class="overlaytitlebar"><tr><td class="ltd"></td><td class="mtd">' + title + '</td><td class="ctd"><a href="javascript:hideform();"><img src="static/images/layout/titlebar_close.png"></a></td><td class="rtd"></td></tr></table>' +
							'<div class="overlaycontent" id="formoverlaycontent" style="max-height: ' + (window.getHeight () - 160 - 23 - 1) + 'px;"><div id="form">' + innerText + '</div></div>' +
						'</td>' +
					'</tr></table>';
			}

			var divnode = document.createElement ("div");
			$(divnode).setid ("formoverlayshade");
			$(divnode).addClassName ("overlayshade");
			$(divnode).setOuterWidth (window.getWidth ());
			$(divnode).setOuterHeight (window.getHeight ());
			$(divnode).setPosition ([0, 0]);
			$("body").appendChild (divnode);

			var divnode = document.createElement ("div");
			$(divnode).setid ("formoverlay");

			if (!navigator.isIE ())	this.hormod = 7;
			else					this.hormod = 0;
			$(divnode).innerHTML = text;
			$("body").appendChild (divnode);
			if (mode == "delconfirm") $("form").addClassName ("alert");

			if (options != undefined && options.dimensions != undefined && options.dimensions[0]) {
				$("formoverlay").setInnerWidth (options.dimensions[0]);
			}
			if (options != undefined && options.dimensions != undefined && options.dimensions[1]) {
				$("formoverlaycontent").setInnerHeight (options.dimensions[1]);
			}
			$("formoverlay").setPosition ([((window.getWidth () - $("formoverlay").getOuterWidth ()) / 2 + this.hormod), ((window.getHeight () - $("formoverlay").getOuterHeight ()) / 2)]);
			Event.observe (window, "keydown", formoverlay.onKeyDown);
			if (url != undefined) {
				getPage (url, { element: "formoverlaycontent" });
			}
		}
		// ---------- formoverlay exists
		else {
			if (options == undefined || options.posturl == undefined || !options.posturl) {
				var mode = "normal";
				var innerText = '';
			} else {
				if (options.type == "confirm") {
					var mode = "confirm";
					var innerText = '<form name="confirmform" action="javascript:void(0);" onsubmit="postForm (\'' + options.posturl + '\', { form: this, element: \'dialog\' }); return false;" class="widget form">' +
							'<div class="dialogtext"><img src="static/images/icons/note.png" class="icon" /> <b>' + options.text + '</b></div>' +
							'<div class="buttonbar">' +
								'<button type="submit"><img src="static/images/icons/ok.png" alt="" class="icon" /><br />Ok</button>' +
								'<button type="button" onclick="hideform2 ();"><img src="static/images/icons/cancel.png" alt="" class="icon" /><br />Abbrechen</button>' +
							'</div>' +
						'</form>';
				} else if (options.type == "delconfirm") {
					var mode = "delconfirm";
					var innerText = '<form name="confirmform" action="javascript:void(0);" onsubmit="postForm (\'' + options.posturl + '\', { form: this, element: \'dialog\' }); return false;" class="widget form">' +
							'<div class="dialogtext"><img src="static/images/icons/note.png" class="icon" /> <b>' + options.text + '</b></div>' +
							'<div class="buttonbar">' +
								'<button type="submit"><img src="static/images/icons/ok.png" alt="" class="icon" /><br />Ok</button>' +
								'<button type="button" onclick="hideform2 ();"><img src="static/images/icons/cancel.png" alt="" class="icon" /><br />Abbrechen</button>' +
							'</div>' +
						'</form>';
				}
			}

			if (!navigator.isIE ()) {
				this.hormod = 7;
				var text = '<table width="100%"><tr>' +
						'<td>' +
							'<table class="overlaytitlebar"><tr><td class="ltd"></td><td class="mtd">' + title + '</td><td class="ctd"><a href="javascript:hideform();"><img src="static/images/layout/titlebar_close.png"></a></td><td class="rtd"></td></tr></table>' +
							'<div class="overlaycontent" id="formoverlaycontent2" style="max-height: ' + (window.getHeight () - 160 - 23 - 1) + 'px;"><div id="form2">' + innerText + '</div></div>' +
						'</td>' +
						'<td class="shadow_r"><img src="static/images/layout/shadow_r1.png"></td>' +
					'</tr><tr>' +
						'<td class="shadow_b"><img src="static/images/layout/shadow_b1.png"></td>' +
						'<td class="shadow_br"><img src="static/images/layout/shadow_br.png"></td>' +
					'</tr></table>';
			} else {
				this.hormod = 0;
				var text = '<table width="100%"><tr>' +
						'<td>' +
							'<table class="overlaytitlebar"><tr><td class="ltd"></td><td class="mtd">' + title + '</td><td class="ctd"><a href="javascript:hideform();"><img src="static/images/layout/titlebar_close.png"></a></td><td class="rtd"></td></tr></table>' +
							'<div class="overlaycontent" id="formoverlaycontent2" style="max-height: ' + (window.getHeight () - 160 - 23 - 1) + 'px;"><div id="form2">' + innerText + '</div></div>' +
						'</td>' +
					'</tr></table>';
			}

			var divnode = document.createElement ("div");
			$(divnode).setid ("formoverlay2");

			if (!navigator.isIE ())	this.hormod = 7;
			else					this.hormod = 0;
			$(divnode).innerHTML = text;
			$("body").appendChild (divnode);
			if (mode == "delconfirm") $("form2").addClassName ("alert");

			if (options != undefined && options.dimensions != undefined && options.dimensions[0]) {
				$("formoverlay2").setInnerWidth (options.dimensions[0]);
			}
			if (options != undefined && options.dimensions != undefined && options.dimensions[1]) {
				$("formoverlaycontent2").setInnerHeight (options.dimensions[1]);
			}
			$("formoverlay2").setPosition ([((window.getWidth () - $("formoverlay2").getOuterWidth ()) / 2 + this.hormod), ((window.getHeight () - $("formoverlay2").getOuterHeight ()) / 2)]);
			Event.observe (window, "keydown", formoverlay.onKeyDown);
			if (url != undefined) {
				getPage (url, { element: "formoverlaycontent2" });
			}
		}
	},

	resize: function () {
		//alert ("set pos");
		if ($("formoverlaycontent").getOuterHeight () > (window.getHeight () - 100)) $("formoverlaycontent").setOuterHeight (window.getHeight () - 100);
		$("formoverlay").setPosition ([((window.getWidth () - $("formoverlay").getOuterWidth ()) / 2 + this.hormod), ((window.getHeight () - $("formoverlay").getOuterHeight ()) / 2)]);
	},

	onKeyDown: function (e) {
		if (e.keyCode == 27) formoverlay.hide ();
	},

	hide: function () {
		if ($("formoverlay2")) $("formoverlay2").remove ();
		Event.stopObserving (window, "keydown", formoverlay.onKeyDown);
		$("formoverlay").remove ();
		$("formoverlayshade").remove ();
		hideinfo ();
	},

	hide2: function () {
		$("formoverlay2").remove ();
		hideinfo ();
	}
}


showupload = function (id) {
	uploadoverlay.show (id);
}

updateupload = function (info) {
	uploadoverlay.update (info);
}

hideupload = function () {
	uploadoverlay.hide ();
}

cancelupload = function () {
	window.stop ();
	hideupload ();
}

uploadoverlay = {
	active: false,
	id: undefined,
	pe: undefined,

	show: function (id) {
		uploadoverlay.id = id;

		var divnode = document.createElement ("div");
		$(divnode).setid ("uploadoverlayshade");
		$(divnode).addClassName ("overlayshade");
		$(divnode).setOuterWidth (window.getWidth ());
		$(divnode).setOuterHeight (window.getHeight ());
		$(divnode).setPosition ([0, 0]);
		$("body").appendChild (divnode);

		var divnode = document.createElement ("div");
		$(divnode).setid ("uploadoverlay");
		var innerText = '<img src="static/images/ajax-loader.gif" alt="" />' +
			'<h2>Datei-Upload</h2>' +
			'<p><span id="uploadoverlay_size_percent">0</span>% von <span id="uploadoverlay_size_total"></span></p>' +
			'<br />' +
			'<div class="bar"><div id="uploadoverlay_innerbar"></div></div>' +
			'<p>Verbleibend: <span id="uploadoverlay_size_left"></span> (~ <span id="uploadoverlay_time_left"></span>)</p>' +
			'<p><span id="uploadoverlay_speed_last">0</span> /sek (~ <span id="uploadoverlay_speed_average">0</span> /sek Durchschnitt)</p>' +
			'<p class="right"><button type="button" onclick="cancelupload ();"><img src="static/images/icons/cancel.png" class="icon" /> Abbrechen</button></p>';
		$(divnode).innerHTML = '<table width="100%"><tr>' +
				'<td>' +
					'<table class="overlaytitlebar"><tr><td class="ltd"></td><td class="mtd">Upload</td><td class="ctd"></td><td class="rtd"></td></tr></table>' +
					'<div id="uploadoverlaycontent">' + innerText + '</div>' +
				'</td>' +
				'<td class="shadow_r"><img src="static/images/layout/shadow_r1.png"></td>' +
			'</tr><tr>' +
				'<td class="shadow_b"><img src="static/images/layout/shadow_b1.png"></td>' +
				'<td class="shadow_br"><img src="static/images/layout/shadow_br.png"></td>' +
			'</tr></table>';
		$("body").appendChild (divnode);
		$(divnode).setPosition ([(window.getWidth () / 2 - $(divnode).getOuterWidth () / 2), (window.getHeight () / 2 - $(divnode).getOuterHeight () / 2)]);
		new PeriodicalExecuter (uploadoverlay.getupdate, 1);
		uploadoverlay.active = true;
	},

	getupdate: function (pe) {
		uploadoverlay.pe = pe;
		//alert ("_helper.view.upload?id=" + uploadoverlay.id);
		getPage ("_helper.view.upload?id=" + uploadoverlay.id, { element: "none" });
	},

	update: function (info) {
		$("uploadoverlay_size_percent").innerHTML = info["size_percent"];
		$("uploadoverlay_size_total").innerHTML = info["size_total"];
		$("uploadoverlay_innerbar").setOuterWidth ($("uploadoverlay_innerbar").up ().getInnerWidth () / 100 * info["size_percent"]);
		$("uploadoverlay_innerbar").setOuterHeight ($("uploadoverlay_innerbar").up ().getInnerHeight ());
		$("uploadoverlay_size_left").innerHTML = info["size_left"];
		$("uploadoverlay_time_left").innerHTML = info["time_left"];
		$("uploadoverlay_speed_last").innerHTML = info["speed_last"];
		$("uploadoverlay_speed_average").innerHTML = info["speed_average"];
	},

	hide: function () {
		if (uploadoverlay.active) {
			uploadoverlay.pe.stop ();
			$("uploadoverlay").remove ();
			$("uploadoverlayshade").remove ();
			uploadoverlay.active = false;
		}
	}
}


showprogress = function (id) {
	progressoverlay.show (id);
}

updateprogress = function (info) {
	progressoverlay.update (info);
}

hideprogress = function () {
	progressoverlay.hide ();
}

progressoverlay = {
	id: undefined,
	pe: undefined,

	show: function (id) {
		progressoverlay.id = id;

		var divnode = document.createElement ("div");
		$(divnode).setid ("progressoverlayshade");
		$(divnode).addClassName ("overlayshade");
		$(divnode).setOuterWidth (window.getWidth ());
		$(divnode).setOuterHeight (window.getHeight ());
		$(divnode).setPosition ([0, 0]);
		$("body").appendChild (divnode);

		var divnode = document.createElement ("div");
		$(divnode).setid ("progressoverlay");
		$(divnode).innerHTML = '<img src="static/images/ajax-loader.gif" alt="" />' +
			'<h2>Datei-Progress</h2>' +
			'<p><span id="progressoverlay_size_percent">0</span>% von <span id="progressoverlay_size_total"></span></p>' +
			'<br />' +
			'<div class="bar"><div id="progressoverlay_innerbar"></div></div>' +
			'<p>Verbleibend: <span id="progressoverlay_size_left"></span> (~ <span id="progressoverlay_time_left"></span>)</p>' +
			'<p><span id="progressoverlay_speed_last">0</span> /sek (~ <span id="progressoverlay_speed_average">0</span> /sek Durchschnitt)</p>';
		$("body").appendChild (divnode);
		$(divnode).setPosition ([(window.getWidth () / 2 - $(divnode).getOuterWidth () / 2), (window.getHeight () / 2 - $(divnode).getOuterHeight () / 2)]);
		new PeriodicalExecuter (progressoverlay.getupdate, 1);
	},

	getupdate: function (pe) {
		progressoverlay.pe = pe;
		getPage ("_helper.view.progress?id=" + progressoverlay.id, { element: "none" });
	},

	update: function (info) {
		$("progressoverlay_size_percent").innerHTML = info["size_percent"];
		$("progressoverlay_size_total").innerHTML = info["size_total"];
		$("progressoverlay_innerbar").setOuterWidth ($("progressoverlay_innerbar").up ().getInnerWidth () / 100 * info["size_percent"]);
		$("progressoverlay_innerbar").setOuterHeight ($("progressoverlay_innerbar").up ().getInnerHeight ());
		$("progressoverlay_size_left").innerHTML = info["size_left"];
		$("progressoverlay_time_left").innerHTML = info["time_left"];
		$("progressoverlay_speed_last").innerHTML = info["speed_last"];
		$("progressoverlay_speed_average").innerHTML = info["speed_average"];
	},

	hide: function () {
		progressoverlay.pe.stop ();
		$("progressoverlay").remove ();
		$("progressoverlayshade").remove ();
	}
}

