/*
Author: Dirk Strothmann
Copyright(C) 2007 Dirk Strothmann (www.web4map.com). All rights reserved.
Duplication or redistribution prohibited without written permission of the author.
*/
GMarker.prototype.x126=function(){ this.b12=false; if (this.filledpolygon) this.filledpolygon.remove(); var mrk=this.mnext; while (mrk!=this){ mrk.b12=false; if (mrk.filledpolygon) mrk.filledpoygon.remove(); mrk=mrk.mnext; }}; GMarker.prototype.x127=function(){ var mark=this; while (mark.mprevious){ if (mark.mprevious==this) return (++mark.b26); mark=mark.mprevious; }; return (++mark.b26); }; GMarker.prototype.x133=function(){ var marker=this; var lastmarker=marker; var iscircle=false; while (marker.mprevious && !marker.b6 && !marker.b25 && !iscircle){ lastmarker=marker; marker=marker.mprevious; if (marker==this) { marker.b6=true; iscircle=true; }}; if (marker.b6 || marker.b25) return marker; while (marker.mnext && !marker.b6) marker=marker.mnext; if (marker.b6) return marker; else alert("Program Error: Could not find startmarker"); }; GMarker.prototype.x139=function(){ var mark; var point; var tt; if (this.b25) mark=this; else mark=this.x133(); var pline=mark.polyline; var vertexnumber=pline.getVertexCount(); var j; var estring= '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n'+ '<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="mapwebber.com" version="1.1"\n'+ 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n'+ 'xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">\n'; estring+="\n<rte>\n"; if ((tt=mark.x159())!="") estring+="<name>"+tt+"</name>\n"; for (j=0;j<vertexnumber;j++){ var point=pline.getVertex(j); estring+="<rtept>\n<lat>"+point.lat()+"</lat>\n <lon>"+point.lng()+"</lon>\n</rtept>\n"; }; estring+="\n</rte>\n</gpx>"; x6("exportgps1").value=estring; x6("exportgps").style.display="block"; }; GMarker.prototype.x140=function(){ var mark; var mbr; var ci; if (this.b22>0) mark=this; else mark=this.x133(); var startmark=mark; var init=1; if (mark.b12) map.addOverlay(mark.filledpolygon); map.addOverlay(mark.polyline); if (mark.icManager){ var zoomindex; for (zoomindex=0;zoomindex<17;zoomindex++){ if (mark.icList[zoomindex].length>0){ mark.icManager.addMarkers(mark.icList[zoomindex],zoomindex,17); }}; mark.icManager.refresh(); }; if (mark.b17) mark.x124(mark.b18); while (mark&&(mark!=startmark || init)){ init=0; for (ci=0;ci<mark.b24;ci++){ mbr=mark.b23[ci]; if (!mbr.hide) mbr.x140(); }; mark=mark.mnext; }}; GMarker.prototype.x141=function(){ var mark; var mbr; var ci; if (this.b25) mark=this; else mark=this.x133(); if (mark.b17) mark.x123(); var startmark=mark; var init=1; if (mark.b12) map.removeOverlay(mark.filedpolygon); map.removeOverlay(mark.polyline); if (mark.icManager) mark.icManager.clearMarkers(); while (mark&&(mark!=startmark || init)){ init=0; for (ci=0;ci<mark.b24;ci++){ mbr=mark.b23[ci]; if (mark.hide){ mbr.x141(); mbr.b13=true; }}; mark=mark.mnext; }}; GMarker.prototype.x143=function(color,opacity){ var startmark=this.x133(); startmark.b10=color; startmark.b11=opacity; startmark.b12=true; if (startmark.filledpolygon){ startmark.filledpolygon.remove(); }; var mark=startmark.mnext; var points=[]; points.push(startmark.getPoint()); while (mark!=startmark){ points.push(mark.getPoint()); mark.b10=color; mark.b11=opacity; mark=mark.mnext; mark.b12=true; }; points.push(startmark.getPoint()); startmark.filledpolygon=new GPolygon(points, startmark.b7, startmark.b8, startmark.b9, startmark.b10, startmark.b11); map.addOverlay(startmark.filledpolygon); }; function x98(x1,x2,y1,y2){ return (x1*y2)-(y1*x2); }; function x99(startv){ var run=startv.mnext; var count=0; var q11=0.0; var s1,s2,s3,s4; var x; do { x=run.mprevious; s1=(run.getPoint().lng()>startv.getPoint().lng())?1:-1; s2=(run.getPoint().lat()>startv.getPoint().lat())?1:-1; s3=(x.getPoint().lng()>startv.getPoint().lng())?1:-1; s4=(x.getPoint().lat()>startv.getPoint().lat())?1:-1; q11+= x98( x71(startv.getPoint().lng(),startv.getPoint().lat(), run.getPoint().lng(),startv.getPoint().lat(),q76)*s1, x71(startv.getPoint().lng(),startv.getPoint().lat(), startv.getPoint().lng(),run.getPoint().lat(),q76)*s2, x71(startv.getPoint().lng(),startv.getPoint().lat(), x.getPoint().lng(),startv.getPoint().lat(),q76)*s3, x71(startv.getPoint().lng(),startv.getPoint().lat(), startv.getPoint().lng(),x.getPoint().lat(),q76)*s4); run=run.mnext; count++; }while (run!=startv.mnext); return Math.abs(q11/2); }; function x100(thisImg){ thisImg.style.backgroundColor="#aaa"; }; function x101(thisImg){ thisImg.style.backgroundColor=''; }; function x102() {}; x102.prototype = new GControl(); x102.prototype.initialize = function(thismap) { var container = document.createElement("div"); var menuDiv = document.createElement("div"); container.appendChild(menuDiv); menuDiv.style.position="relative"; menuDiv.style.left="-50px"; menuDiv.innerHTML= "<div id='animationControl' class='border' style='height:40px;width:390px;left:2px'>"+ "<div id='sInfo' style='height:18px;width:390px;border:1px solid black;text-align:center'></div>"+ "<input style='width:54px;padding-left:2px;padding-right:2px;background:yellow;vertical-align:super;' id='sFromStart' type='textarea'>"+ "<img onload='globalmarker.x147(q60)' onmouseover='x100(this)' onmouseout='x101(this)' id='toStart' title='Go back to start' src='images/tostart.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='q112' title='Step backward' src='images/playbackward.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='q86' title='Play in reverse direction' src='images/playreverse.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='stopAnimation' title='Stop animation' src='images/pause.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='incSpeed' title='Increment the speed of animation' src='images/incspeed.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='decSpeed' title='Decrement the speed of animation' src='images/decspeed.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='playAnimation' title='Play animation in forward direction' src='images/play.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='q113' title='Step forward' src='images/playforward.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='toEnd' title='Go to the end' src='images/toend.gif'>"+ "<input style='width:54px;padding-left:2px;padding-right:2px;background:yellow;vertical-align:super;' id='sToEnd' type='textarea'>"+ "<img src='images/vline.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='q99' title='Remove magnifier' src='images/nomagnifier.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='q105' title='Set magnifier' src='images/magnifier.gif'>"+ "<img onmouseover='x100(this)' onmouseout='x101(this)' id='closeAnimation' title='Close animation' src='images/closeanimation.gif'>"+ "</div>"; if (g_small&&!g_full) mapcontainer.appendChild(container); else thismap.getContainer().appendChild(container); thismap.getContainer().appendChild(x6("q16")); thismap.getContainer().appendChild(x6("q9")); return container; }; x102.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(50,40)); }; function DiaControl() {}; DiaControl.prototype = new GControl(); DiaControl.prototype.initialize = function(thismap) { var container = document.createElement("div"); var menuDiv = document.createElement("div"); container.appendChild(menuDiv); menuDiv.style.position="relative"; menuDiv.style.left="150px"; var ypos=Math.round(parseFloat(mapdiv.style.height)/2)-20; if (g_small&&!g_full){ ypos=25; xpos=parseFloat(mapdiv.style.width); mapcontainer.appendChild(container); }else{ thismap.getContainer().appendChild(container); xpos=0; }; menuDiv.innerHTML="<div id='diashow' style='position:absolute;top:"+ypos+"px';left:"+xpos+"px;'></div>"; return container; }; DiaControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(0,0)); }; function x103() { }; x103.prototype = new GControl(); x103.prototype.initialize = function(map) { var container = document.createElement("div"); var q16 = document.createElement("div"); container.appendChild(q16); q16.innerHTML="<img src='images/xhair.png'>"; map.getContainer().appendChild(container); return container; }; x103.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(30,30)); }; var q80=null; var newDiaControl=null; var globalmarker; var q60; GMarker.prototype.x146=function(routelength){ if (!g_small) hideprojectControls(); globalmarker=this; q60=routelength; if (!q80) q80=new x102(); if (!newDiaControl) newDiaControl=new DiaControl(); map.addControl(newDiaControl); map.addControl(q80); }; GMarker.prototype.x147=function(routelength){ var mark=this.x133(); var mapdiv=x6('map'); var wi=parseFloat(document.body.offsetWidth); var pleft=Math.round((wi-parseFloat(x6('Seitenkopf').style.width)-1)/2); if (mark.b16){ var profileDiv=x6("profile"); profileDiv.style.display="block"; new GDraggableObject(x6("profile")); var q88=x6('profileimgContainer'); profileDiv.style.top="0px"; profileDiv.style.left=String(pleft)+"px"; profileDiv.style.width=mapdiv.style.width; q88.style.width="400px"; q88.style.height="140px"; globalmarker=mark; q88.innerHTML= "<img id='profileImg' onload='globalmarker.x148()' style='z-index:3999; width:"+mark.profileimgwidth+"px; height:"+mark.b38+"px;' src='"+mark.b37+"'>"; }else{ mark.x148(routelength); }}; GPolyline.prototype.GetPointAtDistance0 = function(metres) { if (metres == 0) return this.getVertex(0); if (metres < 0) return null; var dist=0; var olddist=0; for (var i=1; (i < this.getVertexCount() && dist < metres); i++) { olddist = dist; dist += this.getVertex(i).distanceFrom(this.getVertex(i-1)); }; if (dist < metres) {return null;}; var p1= this.getVertex(i-2); var p2= this.getVertex(i-1); var m = (metres-olddist)/(dist-olddist); return new GLatLng( p1.lat() + (p2.lat()-p1.lat())*m, p1.lng() + (p2.lng()-p1.lng())*m); }; GPolyline.prototype.GetPointAtDistance = function(metres) { if (metres == 0){ g_startindex=0; g_startdistance=0; return this.getVertex(0); }; if (metres == g_startdistance) return this.getVertex(g_startindex); var dist=g_startdistance; var olddist=g_startdistance; var vertices=this.getVertexCount(); if (metres > g_startdistance) { for (var i=g_startindex+1; (i <= vertices && dist < metres); i++) { olddist = dist; dist += this.getVertex(i).distanceFrom(this.getVertex(i-1)); }; if (dist < metres) {alert("error:"+dist+" < "+metres+ "("+i+"/"+vertices+":"+g_startindex+"/"+g_startdistance+")");return null;}; g_startindex=i-2; g_startdistance=olddist; var p1= this.getVertex(g_startindex); var p2= this.getVertex(i-1); var m = (metres-olddist)/(dist-olddist); return new GLatLng( p1.lat() + (p2.lat()-p1.lat())*m, p1.lng() + (p2.lng()-p1.lng())*m); }else{ for (var i=g_startindex-1; (i >=0 && dist > metres); i--) { olddist = dist; dist -= this.getVertex(i).distanceFrom(this.getVertex(i+1)); }; if (dist > metres) {alert("null");return null;}; g_startindex=i+2; g_startdistance=olddist; var p1= this.getVertex(g_startindex); var p2= this.getVertex(i+1); var m = (metres-olddist)/(dist-olddist); return new GLatLng( p1.lat() + (p2.lat()-p1.lat())*m, p1.lng() + (p2.lng()-p1.lng())*m); }}; function getPictureAtDistance(ll,metres){ var i=0; if (metres < 0) alert("error in diashow"); var len=ll.length; while (ll[i]<metres && i<len) i++; if (i>0) i--; return i; }; var g_startindex; var g_startdistance; var g_iOpac; function fadeInfo(){ if (g_iOpac<10){ g_iOpac=100; infoContainer.innerHTML=""; }else{ g_iOpac-=3; setOpac(infoContainer,g_iOpac); setTimeout("fadeInfo()",190); }}; var infoContainer; GMarker.prototype.x148=function(routelength){ var startmarker=this; var q7=map.getZoom(); var position=0; var q8=Math.pow(2,(21-q7)); var q104=q8; var mapdiv=x6("map"); var q90=false; infoContainer=x6("diashow"); map.checkResize(); g_startindex=0; g_startdistance=0; q33=true; if (startmarker.b16){ q90=true; var profileDiv=x6("profile"); var q88=x6('profileimgContainer'); var q89=x6("profileimage"); q89.style.width=mapdiv.style.width; q89.style.height=startmarker.b38; q88.style.zIndex=9002; var q94=startmarker.b42; var q92=startmarker.b39; var q93=startmarker.b40; var q91=startmarker.b41; var imagewidth=startmarker.profileimgwidth; }; var startmarker=this.x133(); var traceroute=startmarker.polyline; if (!routelength) routelength=getpolylength(traceroute,0); var minimap= new GMap2(x6("q9")); var q9=x6("q9"); var q10=1; var q87=false; var mini; q9.removeChild(q9.childNodes[2]); q9.removeChild(q9.childNodes[1]); if (q55){ q9.style.display="block"; mini=true; }else{ q9.style.display="none"; mini=false; }; turnoffLoad(); var q79=new x103(); minimap.addControl(q79); var mtop=parseFloat(mapdiv.style.height)/2-40; var mleft=parseFloat(mapdiv.style.width)/2-40; q9.style.top=mtop+"px"; q9.style.left=mleft+"px"; var q17=x6("q16"); q17.style.top=(mtop+30)+"px"; q17.style.left=(mleft+30)+"px"; minimap.checkResize(); var minizoom=q7+1; minimap.setCenter(traceroute.getVertex(0),minizoom,map.getCurrentMapType()); minimap.addOverlay(startmarker.animatedPolyline); var map_moving = 0; var q78 = 0; function Move(){ if (mini){ q78 = true; if (map_moving == false){ minimap.panTo(map.getCenter()); }; q78 = false; }}; GEvent.addListener(map, 'move', Move); if (g_showmyrace){ var runner2pos; runner2= new GMarker(traceroute.getVertex(0),{icon:routeIcon}); map.addOverlay(runner2); }; var markerlist=startmarker.mnext; var oldimgindex=0; var infoarray=new Array(); var lengtharray=new Array(); var ttipArray=new Array(); var diashow; var imgsrc; var sFromStart=x6('sFromStart'); var sToEnd=x6('sToEnd'); var sInfo=x6('sInfo'); var imageContainer=x6('imageContainer'); if (startmarker.infoWinText){ imgsrc=startmarker.infoWinText.match(/<img.*?>/); if (imgsrc){ imageContainer.innerHTML=imgsrc[0]; diashow=1; }else diashow=0; }else diashow=0; if (diashow){ var bild=new Image(); bild.src=imageContainer.firstChild.src; infoarray.push(bild); lengtharray.push(startmarker.lengthfromstart); ttipArray.push(startmarker.title); linkmark=0; }; if (diashow){ g_iOpac=100; infoContainer.innerHTML="<img class='border' src='"+infoarray[0].src+"'></img>"; sInfo.innerHTML=ttipArray[0]; fadeInfo(); }; map.disableDragging(); if (q90){ var q95=x6('profileruler'); q95.style.left=q92+"px"; q95.style.bottom=(q91+24)+"px"; q95.style.height=String(startmarker.b38-q94-q91-10)+"px"; q95.style.display="block"; }; if (diashow){ while (markerlist){ if (markerlist.infoWinText){ imgsrc=markerlist.infoWinText.match(/<img.*?>/); if (imgsrc){ imgsrc=imgsrc[0]; linkmark++; imageContainer.innerHTML=imgsrc; bild=new Image(); bild.src=imageContainer.firstChild.src; infoarray.push(bild); lengtharray.push(markerlist.lengthfromstart*1000); if (markerlist.title) ttipArray.push(markerlist.title); else ttipArray.push("No title"); }}; markerlist=markerlist.mnext; }}; var routelength1000=routelength*1000; var clengthfactor=(imagewidth-q92-q93+2)/routelength1000; position=0; map.setCenter(traceroute.GetPointAtDistance(0)); var q61; position=100; var mapmove=function(){ if (mini) minimap.checkResize(); if (position<routelength1000 &&position>0){ map.panTo(traceroute.GetPointAtDistance(position)); if (timeInit && position>200){ timeInit=0; var btime = new Date(); var difftime=btime.getTime() - starttime; var deviation=difftime-3*position; q8+=Math.round(deviation*3 /position); }; if (diashow){ var newimgindex=getPictureAtDistance(lengtharray,position); if (oldimgindex!=newimgindex){ infoContainer.innerHTML="<img class='border' src='"+infoarray[newimgindex].src+"'></img>"; sInfo.innerHTML=ttipArray[newimgindex]; g_iOpac=100; fadeInfo(); oldimgindex=newimgindex; }}; if (q90){ divsize=parseFloat(profileDiv.style.width); clength=Math.round(position*clengthfactor); rulerpos=clength+q92; imagescrollpos=0; if (divsize<imagewidth){ q61 =Math.round(divsize/2); if (rulerpos>q61){ imagescrollpos=rulerpos-q61; if (imagewidth-imagescrollpos<=divsize){ rulerpos=q61+divsize-imagewidth+imagescrollpos; imagescrollpos=imagewidth-divsize; }else rulerpos=q61; }}; q95.style.left=String(Math.round(rulerpos))+"px"; q88.style.left=(-imagescrollpos)+"px"; }; position+=q8; if (g_showmyrace){ runner2pos=Math.round(position*g_myraceQuot)-1; if (runner2pos<0) runner2pos=0; runner2.setPoint(traceroute.GetPointAtDistance(position+q8)); }}else { if (q8) q104=Math.abs(q8); q8=0; q10=0; }; sFromStart.value=x106(position/1000); sToEnd.value=x106(routelength-position/1000); }; var ehandle=GEvent.addListener(map, "moveend", mapmove); var q85=function(){ if (q8) q104=Math.abs(q8); q8=0; q10=0; }; var playAnimation=function(){ if (position+q104>=routelength1000) return; q8=q104; position+=2*q104; if (q10==0){ q10=1; map.panTo(traceroute.GetPointAtDistance(position+q8)); }}; var q86=function(){ if (position-q104<0) return; q8=-q104; position-=2*q104; if (q10==0){ q10=1; map.panTo(traceroute.GetPointAtDistance(position-q8)); }}; var q65=function(){ if (q8>0) q8+=q8/3; else q8-=q8/3; q104=Math.abs(q8); }; var q19=function(){ if (q8>0) q8-=q8/3; else q8+=q8/3; if (q8==0) q8=q104; q104=Math.abs(q8); }; var q121=function(){ if (q8) q104=Math.abs(q8); position=1; q8=0; if (q10==0) map.setCenter(traceroute.GetPointAtDistance(1)); q10=0; }; var q117=function(){ if (q8) q104=Math.abs(q8); position=routelength1000-1; q8=0; if (q10==0) map.setCenter(traceroute.GetPointAtDistance(position)); q10=0; }; var q113=function(){ if (position+q104>=routelength1000) return; if (q8) q104=Math.abs(q8); q8=0; position+=q104; if (q10==0) map.panTo(traceroute.GetPointAtDistance(position)); q10=0; }; var q112=function(){ if (position-q104<0) return; if (q8) q104=Math.abs(q8); q8=0; position-=q104; if (q10==0) map.panTo(traceroute.GetPointAtDistance(position)); q10=0; }; var q99=function(){ q9.style.display="none"; mini=false; }; var q105=function(){ q9.style.display="block"; mini=true; }; var closeAnimation=function(){ map.removeControl(q80); map.removeControl(newDiaControl); if (q88){ q88.innerHTML=""; if (profileDiv){ q95.style.display="none"; profileDiv.style.display='none'; }}; if (diashow){ infoContainer.innerHTML=""; }; minimap=null; x6("Container2").appendChild(x6("q16")); x6("Container2").appendChild(x6("q9")); GEvent.removeListener(ehandle); map.enableDragging(); q9.removeChild(q9.lastChild); q9.removeChild(q9.firstChild); q33=false; if (!g_small) showprojectControls(); q85=null; playAnimation=null; q86=null; q65=null; q19=null; q121=null; q117=null; q113=null; q112=null; q99=null; q105=null; if (g_showmyrace){ map.removeOverlay(runner2); runner2=null; }; g_showmyrace=0; closeAnimation=null; }; g_closeAnimation=closeAnimation; x6("stopAnimation").onclick=q85; x6("playAnimation").onclick=playAnimation; x6("q86").onclick=q86; x6("q113").onclick=q113; x6("q112").onclick=q112; x6("toStart").onclick=q121; x6("toEnd").onclick=q117; x6("incSpeed").onclick=q65; x6("decSpeed").onclick=q19; x6("closeAnimation").onclick=closeAnimation; x6("q99").onclick=q99; x6("q105").onclick=q105; atime = new Date(); starttime = atime.getTime(); var timeInit=1; g_p1=traceroute.GetPointAtDistance(50); setTimeout("map.setCenter(g_p1)",10);}; var g_p1; function personalrace(mrk,zoom){ map.setZoom(zoom); x6('personalRace').style.display='block'; g_personalstart=mrk; }; var g_runner2; var g_myraceQuot; var g_showmyrace=0; var g_personalstart; function startPersonalRace(h,m,s){ var winner=1*3600+48*60+44; var mytime=parseFloat(h)*3600+parseFloat(m)*60+parseFloat(s); if (mytime<winner || mytime > winner*4){ x6('raceError').style.display="block"; }else{ x6('raceError').style.display='none'; x6('personalRace').style.display='none'; g_showmyrace=1; g_myraceQuot=winner/mytime; g_personalstart.x146(); }}; 