var db={ger:[{n:"Aachen",lt:50.778105,lg:6.088337},{n:"Augsburg",lt:48.37,lg:10.898008},{n:"Berlin",lt:52.526456,lg:13.411903},{n:"Bielefeld",lt:52.023736,lg:8.534049},{n:"Bochum",lt:51.486,lg:7.210897},{n:"Bonn",lt:50.735423,lg:7.096395},{n:"Bremen",lt:53.075786,lg:8.806805},{n:"Chemnitz",lt:50.836367,lg:12.921467},{n:"Dortmund",lt:51.516626,lg:7.457987},{n:"Dresden",lt:51.052344,lg:13.728121},{n:"Duisburg",lt:51.433892,lg:6.769895},{n:"Düsseldorf",lt:51.226076,lg:6.788477},{n:"Erfurt",lt:50.97768,lg:11.023098},{n:"Essen",lt:51.461066,lg:7.014255},{n:"Frankfurt",lt:50.120137,lg:8.684005},{n:"Freiburg",lt:47.999025,lg:7.829732},{n:"Hamburg",lt:53.554864,lg:9.989891},{n:"Hannover",lt:52.372247,lg:9.73816},{n:"Karlsruhe",lt:49.010993,lg:8.404176},{n:"Kassel",lt:51.321386,lg:9.491241},{n:"Kiel",lt:54.323711,lg:10.133453},{n:"Köln",lt:50.941685,lg:6.955043},{n:"Leipzig",lt:51.34497,lg:12.385619},{n:"Lübeck",lt:53.871254,lg:10.688667},{n:"Magdeburg",lt:52.13177,lg:11.62828},{n:"Mannheim",lt:49.487587,lg:8.477668},{n:"München",lt:48.137196,lg:11.575566},{n:"Münster",lt:51.965383,lg:7.626421},{n:"Nürnberg",lt:49.454367,lg:11.07396},{n:"Rostock",lt:54.0904,lg:12.133026},{n:"Saarbrücken",lt:49.236542,lg:6.995211},{n:"Stuttgart",lt:48.78074,lg:9.181652},{n:"Wiesbaden",lt:50.084657,lg:8.242301},{n:"Wuppertal",lt:51.271607,lg:7.187032}],eu:[{n:"Amsterdam",lt:52.373922,lg:4.89028},{n:"Athen",lt:37.97918,lg:23.716647},{n:"Bern",lt:46.947918,lg:7.448043},{n:"Bratislava",lt:48.15326,lg:17.107772},{n:"Brüssel",lt:50.837166,lg:4.367752},{n:"Budapest",lt:47.498647,lg:19.040679},{n:"Dublin",lt:53.347578,lg:-6.266155},{n:"Helsinki",lt:60.169998,lg:24.94},{n:"Kopenhagen",lt:55.68,lg:12.569999},{n:"Lissabon",lt:38.72,lg:-9.14},{n:"London",lt:51.500995,lg:-0.126198},{n:"Ljubljana",lt:46.05456,lg:14.504442},{n:"Madrid",lt:40.418462,lg:-3.703422},{n:"Oslo",lt:59.915578,lg:10.738534},{n:"Paris",lt:48.857712,lg:2.35043},{n:"Prag",lt:50.089364,lg:14.424362},{n:"Rom",lt:41.89655,lg:12.482196},{n:"Stockholm",lt:59.333846,lg:18.06487},{n:"Warschau",lt:52.2351,lg:21.008434},{n:"Wien",lt:48.21129,lg:16.37}]};var mapdiv=document.getElementById("mdmap");var sidebar=document.getElementById("dist");var blue_lines=[],markers=[],orfs=[],entf=[],greens=[],saved=[];var map,i_w,_poly,lupe,listr,rend,count=0,ready_=false;function storePos(){var b=function(a){document.getElementById("s_button").firstChild.style.fontWeight=a};saved.splice(0,2,map.getCenter(),map.getZoom());b("bold");if(!listr){listr=google.maps.event.addListener(map,"bounds_changed",function(){var a=map.getCenter(),c=map.getZoom();if(a.equals(saved[0])&&c==saved[1]){b("bold")}else{b("normal")}})}}function showPos(a){if(a){var c=new google.maps.LatLng(52.052,9.8437);map.setOptions({center:c,zoom:5})}else if(saved.length>0){map.setOptions({center:saved[0],zoom:saved[1]})}}function MDControl(){var g=this.$=function(a){return document.createElement(a)};var j=google.maps,h=this,l=-1,k=[];var i=g("div"),m=g("div"),n=g("div");i.style.margin="7px";i.style.width="172px";m.id="s_button";m.className="no-select";i.appendChild(m);var r=g("a");r.style.cursor="pointer";r.title="Aktuelle Position speichern";r.appendChild(document.createTextNode("Position"));m.appendChild(r);var p=document.getElementById("box");m.appendChild(p);r.onclick=function(){showPos()};m.onmouseover=function(){if(h.timer)clearTimeout(h.timer);p.style.display="block"};m.onmouseout=function(){h.timer=setTimeout(function(){p.style.display="none"},300)};var t=function(a){var c=map.controls[j.ControlPosition.BOTTOM_RIGHT];if(c.getLength()>0)c.pop();if((a==4)||(a==5)){var b=(a==4)?"#000":"#fff";var d=(a==4)?"OpenStreetMap: <a href='http://www.openstreetmap.com'":"Relief Maps: <a href='http://www.maps-for-free.com/html/about.html'";var f=g("div");f.style.fontSize="11px";f.style.color=b;f.style.whiteSpace="nowrap";f.style.margin="0 .8mm .8mm 0";f.innerHTML=d+" target='_blank'>License</a> - ";c.push(f)}};n.id="selTyp";n.className="no-select";n.unselectable="on";n.title="Map-Typ wechseln";var s=map.mapTypes;n.innerHTML=s[map.getMapTypeId()].name;var o=g("ul");o.id="under";i.appendChild(o);i.appendChild(n);var u=function(a,c){var b=g("li");b.appendChild(document.createTextNode(a));b.onmouseover=function(){b.style.backgroundColor="#fcc"};b.onmouseout=function(){b.style.backgroundColor="#fff"};b.onclick=function(){map.setMapTypeId(k[c]);n.innerHTML=a;o.style.display="none";t(c)};return b};for(var q in s){if(s[q].name){l++;k[l]=q;var v=s[q].name;o.appendChild(u(v,l))}}n.onclick=function(){var a=o.style.display;if(a=="block"){o.style.display="none";document.onmousedown=null}else if(a==""||a=="none"){o.style.display="block";document.onmousedown=h.checkOpen}};map.controls[j.ControlPosition.TOP_RIGHT].push(i);return i}MDControl.prototype.checkOpen=function(a){var c=a?a.target:window.event.srcElement;if((c.id!="selTyp")&&(c.nodeName!="LI")){document.getElementById("under").style.display="none";document.onmousedown=null}};function checkRes(){google.maps.event.trigger(map,"resize")}function coll(){var a=parseInt(mapdiv.style.width);var c=document.getElementsByTagName("table")[0].style;var b=document.getElementById("adds").style;if((isNaN(a))||(a<90)){c.visibility="hidden";b.display="none";mapdiv.style.width="99.3%"}else{c.visibility="visible";b.display="block";mapdiv.style.width="79%"}checkRes()}function toggle(c){var b=function(a){return document.getElementById(a)};var d=b("results");var f=b("panel");b("routediv").style.display=c?"block":"none";b("searchdiv").style.display=c?"none":"block";b("rut").className=c?"act":"pass";b("ort").className=c?"pass":"act";if(c){document.forms.t.elements.from.focus();d.style.visibility="hidden";if(f.innerHTML!=""){f.style.visibility="visible"}}else{document.forms.f.elements.q.focus();f.style.visibility="hidden";if(d.innerHTML!=""){d.style.visibility="visible"}}return false}function getDirs(b,d){if(rend){rend.setMap(null);rend.setPanel(null)}var f=google.maps;var g=document.getElementById("panel");var j=new f.DirectionsService();var h={origin:b,destination:d,unitSystem:f.DirectionsUnitSystem.METRIC,travelMode:f.DirectionsTravelMode.DRIVING};rend=new f.DirectionsRenderer({draggable:true,map:map,panel:g});j.route(h,function(a,c){if(c==f.DirectionsStatus.OK){rend.setDirections(a);g.style.visibility="visible"}else{alert("Die angegebene Route wurde nicht gefunden. \nError Code: "+c)}})}function Tooltip(a){this.setValues(a);var c=this.div_=document.createElement("div");c.style.position="absolute";c.style.zIndex="999";c.className="tooltip"}Tooltip.prototype={draw:function(){},visible_changed:function(){var a=this.get("visible");this.div_.style.visibility=a?"visible":"hidden"},getPos:function(){var a=this.getProjection();var c=a.fromLatLngToDivPixel(this.get("position"));var b=this.div_;var d=12;c.x+=d;var f=b.offsetWidth;var g=map.getBounds().getNorthEast();g.x=a.fromLatLngToDivPixel(g).x;if((f+c.x>g.x)&&(f<340)){c.x-=f+(d*2)}b.style.left=c.x+"px";b.style.top=c.y-32+"px"},add_:function(){this.div_.innerHTML=this.get("text").toString();this.getPanes().floatPane.appendChild(this.div_);this.getPos()},rem_:function(){var a=this.div_.parentNode;if(a)a.removeChild(this.div_)}};function inherit(a,c){var b=c.prototype;var d=a.prototype;for(var f in b){if(typeof d[f]=="undefined")d[f]=b[f]}}inherit(Tooltip,google.maps.OverlayView);function makeTip(a,c){var b=google.maps.event;var d=new Tooltip({map:map});d.bindTo("position",a,"position");d.bindTo("text",a,"tooltip");b.addListener(a,"mouseover",function(){d.add_();if(c){a.lister=b.addListener(a,"position_changed",function(){d.set("visible",false);d.getPos()})}});b.addListener(a,"mouseout",function(){d.rem_();if(c)b.removeListener(a.lister)});if(c){b.addListener(a,"dragend",function(){d.set("visible",true)})}return d}function cFoc(a){var c=a.defaultValue,b=a.value;if(b==c){a.value="";a.style.color="#000"}else if(b==""){a.value=c;a.style.color="#aaa"}}function revGeo(d){var f=google.maps;var g=new f.Geocoder();g.geocode({'latLng':d},function(a,c){if(c==f.GeocoderStatus.OK){if(a[0]){var b="<div class='infowindow'><b>Position:<\/b> "+d.toUrlValue()+"<br \/><b>Adresse:<\/b> "+a[0].formatted_address+"<\/div>";i_w.close();i_w.setOptions({content:b,position:d,pixelOffset:new f.Size(0,-20)});i_w.open(map)}}})}function fixMarker(a,c,b,d){var f=google.maps,g="http://sites.google.com/site/mxamples/";var j="<div class='infowindow'><strong>"+b+"<\/strong><span id='elev' style='margin:0 15px'><a href='#' onclick='return getElv(\""+a.lat()+"\" , \""+a.lng()+"\")'>Meeresh&ouml;he<\/a><\/span><p>Luftlinie in km bis<br /><form name='dist' action='' onsubmit='return townDistance(\""+b+"\", this.loc.value)'><input class='search' id='loc' name='loc' type='text' size='15' value='Zielort' onfocus='cFoc(this)' onblur='cFoc(this)' /> <input type='submit' value='Zeig' /><\/form><\/p><\/div>";var h=new f.MarkerImage(g+c,new f.Size(12,20),null,new f.Point(6,20));var l=new f.MarkerImage(g+"mm_shadow.png",new f.Size(22,20),null,new f.Point(6,20));var k=new f.Marker({position:a,map:map,clickable:true,tooltip:b,icon:h,shadow:l});var i=makeTip(k);if(d){f.event.addListener(k,"click",function(){i_w.setOptions({content:j,pixelOffset:new f.Size(0,0)});i_w.open(map,this);i.rem_()})}return k}function flexMarker(d,f){var g=google.maps,j="http://sites.google.com/site/mxamples/";var h=_poly.getPath();var l=new g.MarkerImage(j+"mm_orange.png",new g.Size(12,20),null,new g.Point(6,20));var k=new g.MarkerImage(j+"mm_shadow.png",new g.Size(22,20),null,new g.Point(6,20));var i=new g.Marker({position:d,map:map,draggable:true,tooltip:f,raiseOnDrag:false,icon:l,shadow:k});var m=makeTip(i,true);i.content=count;markers.push(i);h.push(d);g.event.addListener(i,"drag",function(){for(var a=0,c;c=markers[a];a++){if(c==i){var b=i.getPosition();break}}h.setAt(a,b);update()});g.event.addListener(i,"click",function(a){m.rem_();if(!a)var a=window.event;if(a.shiftKey){revGeo(i.getPosition());return}for(var c=0,b;b=markers[c];c++){if(b==i){b.setMap(null);break}}h.removeAt(c);markers.splice(c,1);if(markers.length==0){count=0}else{count=markers[markers.length-1].content}update()});update()}function makePoly(a){return new google.maps.Polyline({strokeColor:a,strokeOpacity:1,strokeWeight:3,clickable:false})}function leftClick(a){if(a.latLng){if(!_poly){_poly=makePoly("#ff6f27")}_poly.setMap(map);count++;var c="Punkt "+count;var b=flexMarker(a.latLng,c)}}function ajax(){var a;try{if(typeof ActiveXObject!="undefined"){a=new ActiveXObject("Microsoft.XMLHTTP")}else if(window["XMLHttpRequest"]){a=new XMLHttpRequest()}return a}catch(e){}}function getElv(b,d){var f=google.maps;var g=new f.ElevationService();var j=new f.LatLng(b,d);var h="N/A";g.getElevationForLocations({'locations':[j]},function(a,c){if(c==f.ElevationStatus.OK){if(a[0]){h=parseInt(a[0].elevation)+" m"}}document.getElementById("elev").innerHTML=h});return false}function buildMap(){var b=google.maps,d="mm_red.png",f="mm_blue.png";var g=new b.ImageMapType({getTileUrl:function(a,c){return"http://tile.openstreetmap.org/"+c+"/"+a.x+"/"+a.y+".png"},tileSize:new b.Size(256,256),isPng:true,minZoom:1,maxZoom:18,name:"OSM",alt:"Open Streetmap tiles"});var j=new b.ImageMapType({getTileUrl:function(a,c){return"http://maps-for-free.com/layer/relief/z"+c+"/row"+a.y+"/"+c+"_"+a.x+"-"+a.y+".jpg"},tileSize:new b.Size(256,256),isPng:false,minZoom:1,maxZoom:11,name:"Relief",alt:"Relief"});map=new b.Map(mapdiv,{center:new b.LatLng(52.052,9.8437),zoom:5,disableDefaultUI:true,mapTypeId:'roadmap',streetViewControl:true,draggableCursor:'auto',draggingCursor:'move',scaleControl:true,navigationControl:true,navigationControlOptions:{style:b.NavigationControlStyle.ZOOM_PAN}});i_w=new b.InfoWindow({maxWidth:350});for(var h=0,l;l=db.ger[h];h++){var k=new b.LatLng(l.lt,l.lg);var i=l.n;fixMarker(k,d,i,true)}for(var m=0,n;n=db.eu[m];m++){var r=new b.LatLng(n.lt,n.lg);var p=n.n;fixMarker(r,f,p,true)}b.event.addListenerOnce(map,"tilesloaded",function(){map.mapTypes.set("osm",g);map.mapTypes.set("relief",j);ready_=true;var a=new MDControl()});b.event.addListener(map,"click",leftClick)}function init(){var a=document.URL;var c=a.match(/\?q\=/);if(!c){buildMap()}else{var b=unescape(a.substr(a.indexOf("=")+1,a.length));search_(b,"Deutschland");document.forms.f.elements.q.value=b;buildMap()}}function changeMap(a,c,b,d){var f=12;if(map.getMapTypeId()=="relief"){f=10}else if(b.match(/stra(ß|ss)e|platz?/i)&&d){f=16}var g=new google.maps.LatLng(parseFloat(a),parseFloat(c));map.setOptions({center:g,zoom:f});var j="mm_green.png";var h=fixMarker(g,j,b,true);h.content=b;greens.push(h)}function makeGray(h,l,k,i){var m=google.maps;m.event.addListenerOnce(h,"dragstart",function(){var a=new m.LatLng(l,k);var c="mm_white.png";for(var b=0,d;d=entf[b];b++){if(d.lat==l){var f=d.dist}}var g="Nach "+i+": "+f;var j=fixMarker(a,c,g,false);orfs.push(j)});m.event.addListenerOnce(h,"click",function(){i_w.close();for(var a=0,c;c=blue_lines[a];a++){if(c.getPath().getAt(1).lat()==h.getPosition().lat()){c.setMap(null);blue_lines.splice(a,1)}}})}function update(){if(markers.length<=1){sidebar.innerHTML="&nbsp;"}else if(markers.length>1){barDistance()}}function Lup(){var c=google.maps;var b=this.node=document.createElement("div");b.id="lupe";b.innerHTML="Zoomlevel: <span id='nr'>"+map.getZoom()+"<\/span>";this.l_=c.event.addListener(map,"zoom_changed",function(){var a=document.getElementById("nr");if(a){a.innerHTML=map.getZoom()}});this.set_("vis",true)}Lup.prototype.set_=function(a,c){var b=google.maps;var d=map.controls[b.ControlPosition.TOP_RIGHT];if(c){d.push(this.node)}else{d.pop();b.event.removeListener(this.l_);lupe=null}};function showDisplay(){if(lupe){lupe.set_("vis",false)}else if(!lupe&&ready_){lupe=new Lup()}}function barDistance(){var a=0,c,b=_poly.getPath();for(var d=1;d<b.getLength();d++){a+=calc(b.getAt(d-1).lat(),b.getAt(d-1).lng(),b.getAt(d).lat(),b.getAt(d).lng())}if(!isNaN(a)){if(a>10){a=Math.round(a);c=" km"}else{a=Math.round(a*1000);c=" m"}sidebar.innerHTML="<strong>Punkt "+markers[0].content+" - Punkt "+markers[markers.length-1].content+"<\/strong><br \/>Luftlinie: "+a+c}}function townDistance(a,c){var b=google.maps;var d,f,g,j,h,l=false;if(c.match(/(\d+)/)){var k=RegExp.$1;if(_poly){var i=_poly.getPath();for(var m=0;m<i.getLength();m++){if(markers[m].content==k){d=i.getAt(m).lat();f=i.getAt(m).lng();makeGray(markers[m],d,f,a);l=true;break}}}}LOOP:for(var n in db){for(var r=0,p;p=db[n][r];r++){var t=p.n;if(t.toLowerCase()==c.toLowerCase()){d=p.lt;f=p.lg}if(t==a){g=p.lt;j=p.lg}if(d&&g){break LOOP}}}if(!(d&&g)){for(var s=0,o;o=greens[s];s++){if(o.content.toLowerCase()==c.toLowerCase()){d=o.getPosition().lat();f=o.getPosition().lng()}if(o.content==a){g=o.getPosition().lat();j=o.getPosition().lng()}}}if(d){var i=[new b.LatLng(g,j),new b.LatLng(d,f)];var u=makePoly("#FF1493");u.setOptions({map:map,path:i});blue_lines.push(u);var q=calc(g,j,d,f);if(q>10){q=Math.round(q);h=" km"}else{q=Math.round(q*1000);h=" m"}if(l){var v={lat:d,dist:q+h};entf.push(v);c="Punkt "+k}else{c=c.replace(/^./,c.charAt(0).toUpperCase())}var w="<div class='infowindow'><p><strong>"+a+" - "+c+"<\/strong><br \/>Luftlinie: "+q+h+"<\/p><\/div>";var x=new b.LatLng(g,j);i_w.setOptions({position:x,content:w,pixelOffset:new b.Size(0,-20)});i_w.open(map)}else{alert(c+" wurde nicht auf der Karte gefunden.\nVersuchen Sie vorher die Ortssuche.")}return false}function deg2rad(a){return a/(180/Math.PI)}function calc(a,c,b,d){var f=6371.3;var g=Math.sin(deg2rad(a))*Math.sin(deg2rad(b));var j=Math.cos(deg2rad(a))*Math.cos(deg2rad(b));var h=f*Math.acos(g+j*Math.cos(deg2rad(c-d)));return h}function clearItems(){var a=[blue_lines,markers,greens,orfs];if(rend){rend.setMap(null);rend.setPanel(null);document.getElementById("panel").style.visibility="hidden"}count=entf.length=0;sidebar.innerHTML="&nbsp;";i_w.close();if(_poly){_poly.setMap(null);_poly=null}for(var c=0,b;b=a[c];c++){for(var d=0,f;f=b[d];d++){if(b==markers){google.maps.event.clearInstanceListeners(f)}f.setMap(null)}b.length=0}}function makeVis(a){var c=document.getElementById("results");c.style.visibility="visible";c.innerHTML=a}function search_(h,l){var k="";if(h.length<=1){if(h=="")h="&Oslash;";k+="<b>"+h+"<\/b> wurde nicht gefunden.";makeVis(k);return}if(l.substr(0,2).toLowerCase()=="de"){var i=ajax();i.open("GET","cgi-bin/dbsearch.pl?q="+h,true);i.onreadystatechange=function(){if(i.readyState==4){var a=i.responseXML;var c=a.getElementsByTagName("city");if(c.length>=1){for(var b=0,d;d=c[b];b++){var f=d.getAttribute("lat");var g=d.getAttribute("lng");var j=d.getAttribute("name");if(b==0){changeMap(f,g,j)}k+=(b+1)+". ";k+=j.link("javascript:changeMap("+f+","+g+",'"+j+"')");k+="<br \/>"}makeVis(k)}else{geoG(h,l)}}};i.send(null)}else{geoG(h,l)}}function geoG(j,h){var l=google.maps,k,i="";var m=new l.Geocoder();m.geocode({'address':j+', '+h},function(a,c){if(c==l.GeocoderStatus.OK){for(var b=0,d;d=a[b];b++){var f=d.formatted_address;var g=d.geometry.location;if(f.indexOf(",")!=-1){k=f.substring(0,f.lastIndexOf(","))}else{k=f}if(b==0){changeMap(g.lat(),g.lng(),k,1)}i+=(b+1)+". ";i+=k.link("javascript:changeMap("+g.lat()+","+g.lng()+",'"+k+"',"+1+")");i+="<br \/>"}}else{i+="<b>"+j+"<\/b> wurde in "+h+" nicht gefunden."}makeVis(i)})}window.onresize=checkRes;function impress(){var a=open("impress.html","ff","width=600,height=464,left=100,top=50");a.focus()}

