/**
 * ajax setup
 */
$(document).ready(
	function(){
		$("#loader")
			.ajaxStart(
				function(){
					$(this).show();
				}
			)
			.ajaxStop(
				function(){
					$(this).hide();
				}
			);
	}
);
/**
 * google map
 */
var g_map, g_map_resized = false, g_dir;
$(document).ready(
	function(){
		if (typeof GBrowserIsCompatible === "undefined") return;
		if (!GBrowserIsCompatible()) return;
		$("#gmap").each(
			function(){
				g_map = new GMap2(this);
				g_map.addControl(new GLargeMapControl());
				g_map.addControl(new GOverviewMapControl());
				g_map.addControl(new GMapTypeControl());
				g_map.addControl(new GScaleControl());
				g_map.setCenter (new GLatLng(52.529903, 13.41568), 11);
				$(window).unload(GUnload);
			}
		);
		$("#gdir")
			.each(
				function(){
					g_dir = new GDirections(g_map, this);
					var $gdir = $(this);
					GEvent.addListener( 
						g_dir, "load", function(){
							g_map.closeInfoWindow();
							$gdir.show();
						}
					);
					GEvent.addListener( 
						g_dir, "error", function(){
							switch (g_dir.getStatus().code) {
								case G_GEO_UNKNOWN_ADDRESS:
									$.notifier.error("Adresse nicht gefunden.");
									break;
								default:
									$.notifier.error("Fehler.");
							}
							$gdir.hide();
						}
					);
				}
			);
	}
);
function gquery (q) {
	if (g_map === undefined) return;
	if (!q.trim().length) return;
	new GClientGeocoder().getLatLng(
		q, function (point) {
			if (!point) {
				$.notifier.error("Adresse nicht gefunden.");
			} else {
				glocate(point, 'Ihre Standort', {});
				g_map.panTo(point);
			}
		}
	);
};
var markers = 0;
function glocate (point, title, data) {
	if (g_map === undefined) return;
	markers++;
	var icon  = new GIcon();
	icon.image      = "/img/icons/map-marker-red.png";
	icon.imageHover = "/img/icons/map-marker-red-hover.png";
	icon.iconSize   = new GSize(10, 16);
	icon.shadow     = "/img/icons/map-marker-red-shadow.png";
	icon.shadowSize = new GSize(19, 16);
	icon.iconAnchor = new GPoint(5, 16);
	icon.infoWindowAnchor = new GPoint(5, 1);
	if (data.banner) {
		icon.image      = "/img/icons/map-marker-blue.png";
		icon.imageHover = "/img/icons/map-marker-blue-hover.png";
		icon.iconSize   = new GSize(15, 24);
		icon.shadow     = "/img/icons/map-marker-blue-shadow.png";
		icon.shadowSize = new GSize(28, 24);
		icon.iconAnchor = new GPoint(7.5, 24);
		icon.infoWindowAnchor = new GPoint(7.5, 1);
	}
	var marker = new GMarker(point, {icon: icon, draggable: true});
	g_map.addOverlay(marker);
	var min = $(
		'<div class="data' + (data.banner ? " azk" : "") + '">' + 
		'	' + (data.src ? data.src : '<h2>' + title + '</h2>') + 
		'	<form>' + 
		'		Route berechnen: <b>Hierher</b> | <a href="#">Von hier</a><br />' + 
		'		<span class="subtitle">Startadresse</span><br />' + 
		'		<input type="text" name="from" /> <input type="submit" value="Los" class="button" />' + 
		'	</form>' + 
		'	<form>' + 
		'		Route berechnen: <a href="#">Hierher</a> | <b>Von hier</b><br />' + 
		'		<span class="subtitle">Zieladresse</span><br />' + 
		'		<input type="text" name="to" /> <input type="submit" value="Los" class="button" />' + 
		'	</form>' + 
		'</div>'
	);
	$("form", min)
		.highlight()
		.submit(
			function(){
				if (g_dir === undefined) return false;
				if (this.from !== undefined)    g_dir.load("from: " + this.from.value + " to: " + point);
				else if (this.to !== undefined) g_dir.load("from: " + point + " to: " + this.to.value);
				return false;
			}
		)
		.eq(1).hide();
	$("form a", min)
		.click(
			function(){
				$("form:hidden", min).show();
				$(this).parent().hide();
				return false;
			}
		);
	$("a[target='_blank']", min)
		.one(
			"click", function(){
				$.get("/json/tracker", {url: this.href, from: document.location.href});
				return true;
			}
		);
	$("a.pop", min).popup();
	$("a.tooltip", min).tooltip();
	var max = $(
		'<div>' + 
			(data.banner ? '<br />' + data.banner : '') + 
		'</div>'
	);
	GEvent.addListener(
		marker, "click", function(){
			marker.openInfoWindowHtml(min[0], {
				maxContent: max[0], 
				maxTitle:   title
			});
		}
	);
	GEvent.addListener(
		marker, "dragstart", function(){
			if (!g_map.getInfoWindow().isHidden()) g_map.closeInfoWindow();
		}
	);
	var line;
	GEvent.addListener(
		marker, "drag", function(){
			if (line !== undefined) g_map.removeOverlay(line);
			line = new GPolyline([
				point, marker.getLatLng()
			], "#000000", 1, 1);
			g_map.addOverlay(line);
		}
	);
	$('<a href="#"' + (data.banner ? 'class="bold"' : '') + '>' + title + '</a>')
		.click(
			function(){
				g_map.panTo(point);
				GEvent.trigger(marker, "click");
				this.blur();
				return false;
			}
		)
		.hover(
			function(){
				marker.setImage(icon.imageHover);
			}, 
			function(){
				marker.setImage(icon.image);
			}
		)
		.appendTo("#map-sidebar");
	return marker;
};
$(document).ready(
	function(){
		//
		$(":text.empty-text").emptyText();
		//
		$("#search")
			.each(
				function(){
					var obj   = this, 
						 $qcks = $("#quick-search", this), 
						 $advs = $("#advanced-search", this);
					if (window.location.href.indexOf("advanced=true") >= 0) $qcks.hide();
					else $advs.hide();
					$("a.init", obj)
						.click(
							function(){
								$(":text", obj)
									.not(".emptytext")
									.val("")
									.blur();
								$(obj).autofocus();
								this.blur();
								return false;
							}
						);
					$("a:first", $qcks)
						.click(
							function(){
								$qcks.hide();
								$advs
									.fadeIn(
										"slow", function(){
											$(this).autofocus();
										}
									);
								return false;
							}
						);
					$("a:first", $advs)
						.click(
							function(){
								$advs.hide();
								$qcks.fadeIn("slow");
								return false;
							}
						);
					$(":text[name='wer']", this)
						.suggest(
							"/json/suggest", function (data) {
								this.value = '"' + data.suggest + '"';
							}
						);
					var $was = $(":text[name='was']", $qcks)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
								if (this.value.trim().length && !$wo.isEmptyText() && $wo.val().trim().length) $qcks.submit();
							}, {min: 2}
						);
					var $wo = $(":text[name='wo']", $qcks)
						.suggest(
							"/json/suggest", function (data) {
								if (data.plz)           this.value = data.plz;
								else if (data.ortsteil) this.value = data.ortsteil;
								else if (data.ort)      this.value = data.ort;
								else if (data.bezirk)   this.value = data.bezirk;
								if (this.value.trim().length && !$was.isEmptyText() && $was.val().trim().length) $qcks.submit();
							}
						);
					$(":text[name='branche']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
							}, {min: 2}
						);
					$(":text[name='schlagwort']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
							}
						);
					$(":text[name='strasse']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.strasse;
								$plz.val(data.plz);
								$bezirk.val(data.bezirk);
							}
						);
					var $plz = $(":text[name='plz']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.plz;
								$bezirk.val(data.bezirk);
							}
						);
					$(":text[name='ortsteil']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.ortsteil;
								$bezirk.val(data.bezirk);
							}
						);
					var $bezirk = $(":text[name='bezirk']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
							}
						);
					$(":text[name='ort']", $advs)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
							}
						);
				}
			);
		$("#news-search :text:first")
			.suggest(
				"/json/suggest", function (data) {
					this.value = data.suggest;
					this.form.submit();
				}, {q: "schlagwort"}
			);
		$("#online-eintrag")
			.each(
				function(){
					var $plz = $(":text[name='plz']", this);
					$(":text[name='strasse']", this)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.strasse;
								$plz.val(data.plz);
								$ort.val(data.ort);
							}
						);
					$(":text[name='branche']", this)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
							}, {min: 2}
						);
					var $ort = $(":text[name='ort']", this)
						.suggest(
							"/json/suggest", function (data) {
								this.value = data.suggest;
							}
						);
				}
			);
		//
		$("a.pop").popup();
		$("a.tooltip, p.pages a").tooltip();
		$("ul.tabs")
			.parent()
				.tabs(
					function(){
						if (this.id == "map") {
							if (g_map === undefined) return;
							if (!g_map_resized) {
								g_map_resized = true;
								g_map.checkResize();
								g_map.setCenter(g_map.getCenter());
							}
						}
					}
				);
		$("a.up")
			.click(
				function(){
					$.scrollTo(0, 800);
					this.blur();
					return false;
				}
			);
		$("a[target='_blank']")
			.one(
				"click", function(){
					$.get("/json/tracker", {url: this.href, from: document.location.href});
					return true;
				}
			);
		$("form, table.autolight").highlight();
		$("form.autosubmit")
			.ajaxForm(
				function (json) {
					if (json.error)   $.notifier.error(json.error);
					if (json.success) $.notifier.success(json.success);
				}, "json"
			);
		//
		$("#karte")
			.each(
				function(){
					var karte = this;
					for (var i = 1; i < 25; i++) {
						$.preload("/img/karte_" + i + ".gif");
					}
					$("#karte-a area[href]")
						.tooltip()
						.mouseover( 
							function(){
								var res = this.href.match(/\/([0-9]+)_/);
								if (res) karte.src = "/img/karte_" + res[1] + ".gif";
								else     karte.src = "/img/karte_24.gif";
							}
						)
						.mouseout( 
							function(){
								karte.src = "/img/karte_0.gif";
							}
						);
					if ($.browser.mozilla) {
						$("div.sidebar")
							.append(
								'<a href="/toolbar/"><img src="/img/toolbar-install.jpg" alt="" /></a>'
							);
					}
				}
			);
		//
		$("#filter")
			.each(
				function(){
					var $divs =    $("div.fieldset > div"),
						 $anchors = $("div.fieldset > div a");
					$("#filter a")
						.click(
							function(){
								var letter = this.innerHTML.toUpperCase();
								if (letter == "+")      $divs.show();
								else if (letter == "–") $divs.hide();
								else if (letter == "ALLE") {
									$divs.show();
									$anchors.show();
								} else {
									$divs.show();
									$anchors
										.each(
											function(){
												if (this.innerHTML.charAt(0) == letter) $(this).show();
												else $(this).hide();
											}
										);
								}
								this.blur();
								return false;
							}
						);
					$("#filter input")
						.keyup(
							function(){
								var search = this.value.toLowerCase().trim();
								if (search.length) {
									$anchors
										.each(
											function(){
												if (this.innerHTML.toLowerCase().indexOf(search) >= 0) $(this).show();
												else $(this).hide();
											}
										);
								}
							}
						);
				}
			);
		//
		$("div.crop img")
			.hoverIntent(
				function(){
					$(this)
						.css({
							position: "absolute",
							height:   "auto", 
							maxWidth: "none"
						});
				}, function(){
					$(this)
						.css({
							position: "",
							height:   "", 
							maxWidth: ""
						});
				}
			);
		//
		$("#map-header :text")
			.suggest(
				"/json/suggest", function (data) {
					this.value = data.strasse + ", " + data.ort + ", " + data.plz;
				}, {q: "strasse"}
			);
		$("#map-search")
			.submit(
				function(){
					$.cookie("mylocation", this.elements[0].value, {path: "/", expires: 365});
					gquery(this.elements[0].value);
					return false;
				}
			);
		var mylocation = $.cookie("mylocation");
		if (mylocation) {
			$("#map-search :text")
				.removeClass("emptytext")
				.val(mylocation);
		}
		$("#map-search-dir")
			.submit(
				function(){
					if (g_dir === undefined) return false;
					if (!this.from.value.trim().length) return false;
					if (!this.to.value.trim().length)   return false;
					g_dir.load("from: " + this.from.value + " to: " + this.to.value);
					return false;
				}
			);
		//
		$("div.fieldset")
			.each(
				function(){
					var $div = $("div:first", this);
					$("h2 a", this)
						.click(
							function(){
								$div.slideToggle();
								this.blur();
								return false;
							}
						);
				}
			);
		$("a.autotoggle")
			.each(
				function(){
					if (!this.hash) return;
					var $target = $(this.hash);
					if (!$target.length) return;
					$target.hide();
					$(this)
						.click(
							function(){
								$target.slideToggle();
								this.blur();
								return false;
							}
						);
				}
			);
		$("a.captcha")
			.click(
				function(){
					var $img = $(this).prev("img");
					if (!$img.length) return;
					$img[0].src = $img[0].src.split("?")[0] + "?ts=" + new Date().getTime();
					this.blur();
					return false;
				}
			);
		//
		$("#gallery-sidebar a").gallery("#gallery-main");
		//
		$("#ticker")
			.each(
				function(){
					var $ticker = $(this), 
						height = $("div", $ticker).length * 20;
					$.timer(
						"t1", function (){
							$("div:first", $ticker)
								.slideUp(
									"slow", function(){
										$(this)
											.appendTo($ticker)
											.show();
									}
								);
						}, 5
					).run();
					var $anchor = $("a:first", $ticker)
						.toggle(
							function(){
								this.innerHTML = "&laquo; Zuklappen";
								$.timer("t1").stop();
								$ticker
									.stop(true)
									.animate({height: height});
								this.blur();
								return false;
							}, 
							function(){
								this.innerHTML = "&raquo; Aufklappen";
								$.timer("t1").run();
								$ticker
									.stop(true)
									.animate({height: "60"});
								this.blur();
								return false;
							}
						);
					$ticker
						.hover(
							function(){
								$anchor.show();
							}, 
							function(){
								if ($.timer("t1").state == "running") $anchor.hide();
							}
						);
				}
			);
		//
		$("div.az")
			.each(
				function(){
					var az = this, 
						anzeigen = false, 
						index = -1;
					$("a.az", this)
						.one(
							"click", function(){
								var anchor = this;
								$.getJSON(
									this.href, 
									function (json) {
										if (json.length) {
											anzeigen = json;
											$(anchor).click();
										}
									}
								);
							}
						)
						.click(
							function(){
								if (anzeigen) {
									$("div.shadow", az)
										.remove();
									index++;
									if (index >= anzeigen.length) index = 0;
									$(this)
										.html("Anzeige " + (index + 1) + " von " + anzeigen.length + " | weiter &raquo;")
									var $div = $('<div class="shadow"><img src="/img/ajax-loader3.gif" alt="" /></div>')
										.appendTo(az);
									var image = new Image();
									image.onload = function(){
										$(this)
											.hide()
											.appendTo($div.empty())
											.fadeIn();
										if (anzeigen[index].internet) $(this).wrap('<a href="http://' + anzeigen[index].internet + '" target="_blank"></a>');
									};
									image.src = "/img/az/" + anzeigen[index].anzeige + ".jpg";
								}
								this.blur();
								return false;
							}
						);
				}
			);
		//
		$(this).autofocus();
		$(":text")
			.focus(
				function(){
					this.select();
				}
			);
	}
);
