gmap = {
	
	haveMaps: function() {
		return window["GBrowserIsCompatible"] && GBrowserIsCompatible();
	},
	
	init: function() {
		if(!gmap.haveMaps())
			return;
		if(!$("#addr_list").length)
			return;
		gmap.gcCache = {}
		$("#addr_list div").click(function() {
			gmap.select(this);
		});
		gmap.select($("#addr_list div:first"));
		
		
		
		$("#addr_dir_form").submit(function() {
			try {
				$("#addr_directions").html("");
				gmap.mapDirections($("#addr_from").val());
			} catch(e) { }
			return false;
		});
		$("body").unload(function() {
			GUnload();
		});
	},

	select: function(div) {
		var addr = $(div).find("h3").html();
		gmap.mapGoto(addr);
		$("#addr_list div").removeClass("on");
		$(div).addClass("on");
		$("#addr_directions").html("");
		$("#addr_link").html("");
		
	},
	
	snorm: function(s) {
		s = (s + "").replace(/<.+?>/g, " ").replace(/\s+/g, " ");
		var m = s.match(/\[(.+?)\]/);
		if(m) return m[1];
		return s;
	},

	mapGeoDecode: function(addr, onDecode) { 
		var a = gmap.snorm(addr);
		if(gmap.gcCache[a]) {
			return gmap.gcCache[a];
		}
		var geocoder = new GClientGeocoder();
		geocoder.getLatLng(a, function(pt) {
			if(pt) {
				gmap.gcCache[a] = pt;
				onDecode();
			}
		});
		return null;
	},

	mapGoto: function(addr) {
		if(!gmap.haveMaps())
			return;
		gmap.last = addr;
		var pt = gmap.mapGeoDecode(addr, function() { gmap.mapGoto(addr) });
		if(!pt)
			return;
		var map = new GMap2(document.getElementById("addr_map"));
		map.setCenter(pt, 12);
		var marker = new GMarker(pt);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(addr.replace(/\[.+?\]/g, ""));
	},
	
	mapDirections: function(from, to) {
		if(!gmap.haveMaps())
			return;
		to = to || gmap.last;
		var pt = gmap.mapGeoDecode(to, function() { gmap.mapDirections(from, to) });
		if(!pt)
			return;

		var map = new GMap2(document.getElementById("addr_map"));
		map.setCenter(pt, 12);

		var dp = document.getElementById("addr_directions")
	 	var dirs = new GDirections(map, dp);
	
		var from = gmap.snorm(from)
		var to = gmap.snorm(to);
	
		var q = "from: " + from + " to: " + to;
		dirs.load(q);
		
		q = encodeURIComponent(q);
		$("#addr_link").html("<a target=_blank href='http://maps.google.com/maps?q=" + q + "'>in Google Maps öffnen</a>");
		
	}		

}


app = {
	
	contactNav: {
		offset: 108,
		acc: 0.5,
		top: 0
	},
	
	moveContactNav: function() {
		var e = $("#contactnav");
		var sy = $("#mid").offset().top;
		var wh = $(window).height() - sy;
		var to = wh - e.height();

		var mo = $(".col_2").height() - $(window).scrollTop();


		if(to > mo) to = mo;
		if(to < app.contactTop) to = app.contactTop;

		var ty = sy + $(window).scrollTop() + to - app.contactNav.offset;
		var cy = parseInt(e.css("top")) || 0;
		
		if(ty == cy) return;
		
		var dy = (ty - cy) * app.contactNav.acc;
		
		if(Math.abs(dy) > 1) {
			e.css("top", cy + dy);
		} else {
			e.css("top", ty);
		}
	},
	
	init: function() {
		$("div.qshow").click(function() {
			for(var i = 0; i < 100; i++) {
				$("#q_" + i).hide();
				$("#qhide_" + i).hide();
				$("#qshow_" + i).show();
			}
			var n = this.id.split("_")[1];
			$("#q_" + n).show();
			$("#qshow_" + n).hide();
			$("#qhide_" + n).show();
		});
		$("div.qhide").click(function() {
			var n = this.id.split("_")[1];
			$("#q_" + n).hide();
			$("#qshow_" + n).show();
			$(this).hide();
		});
		
		if($("#contactnav").length) {
			var m = $("#mid").offset().top
			app.contactTop = $("#contactnav").offset().top 
			setInterval(app.moveContactNav, 100)
		}
		
		$(".popup_link").click(function() {
			$(".popup").hide();
			var p = $("#popup_" + $(this).attr("rel"));
			p.css("top", $(this).offset().top - p.height() - 70).show();
			return false;
		});
		
		$(".pop_top a").click(function() {
			$(".popup").hide();
		});
		
		gmap.init()
	}
	
}

$(function() {
	app.init();
})

