 var dirn = new GDirections();
 var firstInit=1;
 var currMap;
      var mStep;
      var step = 5; // metres
      var tick = 100; // milliseconds
      var poly;
      var eol;
      var car = new GIcon();
          car.image="/caricon.png"
          car.iconSize=new GSize(32,18);
          car.iconAnchor=new GPoint(16,9);
    var marker;
    var k=0;
    var stepnum=0;
    var speed = "";
    var p0,p1;  
    var svc;
    var map;    
    var svp;
    var cnt;
    var geocoder;
    var textik2;
    var textik3;
    var mPOV;
    var mPauza;
    var mouse_latlng = null;
    var degreesPerRadian = 180.0 / Math.PI;
    var radiansPerDegree = Math.PI / 180.0;
	var mOtocStep=0;
	var rotTimer;
	var moveTime; 
    var vehicleSpeed = 0;
	var mOtacet=0;
	var animTimer;
	var mLat=0;
	var mLng=0;
	var mRoztazeno=0;
	var initRot=0;
	var carSet=0;
	var navigaceTxt;
	var prijezdDoCile=0;
    var currYaw;
    var currPitch;
    var currZoom;
    //var vehicleBearing = 0;
	function roztahnoutSVfs() {
 	  mPOV=svp.getPOV();	
    //if (svp) neco=svp.getLatLng();     	
 	  //alert('mik');
		window.location="http://www.streetview.cz/svfs.php?l1="+mLat+"&l2="+mLng+"&p1="+mPOV.yaw+"&p2="+mPOV.pitch+"&p3="+mPOV.zoom;
	}
	function roztahnoutSV() {
		if (mRoztazeno==0) {
			msvspan=document.getElementById("mSV");
			mSV.innerHTML='<div id="panorama" style="width: 757px; height: 350px;"></div><div id="map" style="width: 757px; height: 350px;"></div>';
			mRoztazeno=1;
		}
		else {
		 msvspan=document.getElementById("mSV");
		 mSV.innerHTML='<div id="panorama" style="float:left; width: 378px; height: 350px;"></div><div id="map" style="float:right; width: 378px; height:350px;"></div>';
		 mRoztazeno=0;	
		}
	 //s=50.081379;
	 //d=14.457452;
	 //map=map.setCenter(new GLatLng(s,d),12);
	 //msvspan.innerHTML='';
	 mPOV=svp.getPOV();		
	 mSetUpMap(mLat,mLng,mLat,mLng,mPOV.yaw,mPOV.pitch,mPOV.zoom,"panorama",true,"map"); 
	}     
   	function moveStart() {
   			if (vehicleSpeed==0) { 
   			 vehicleSpeed=1;
			 moveTimer=setTimeout("moveStage()", 1);
			 document.getElementById("moveButt").value="zastavit!";	
   			}
			else {
			 clearInterval(moveTimer); 	
			 vehicleSpeed=0;
			 document.getElementById("moveButt").value="kupředu!";
			}            
        }        
    function moveStage()      {
            if (vehicleSpeed > 0)            {
            	mPOV=svp.getPOV();
				currentYaw=mPOV.yaw;
                svp.followLink(currentYaw);
            }            
            if (vehicleSpeed < 0)            {
                vehicleSpeed = 0;
            }
            moveTimer=setTimeout("moveStage()", parseInt(3000 / Math.abs(vehicleSpeed)));
    }
        
	function stopRot() {		
		document.getElementById("rotButt").onclick="otocit()";
		
		clearInterval(rotTimer);
	}
    function otocit() {
    	if (mOtacet==0) { 
    	  mOtacet=1;
		  rotTimer=setTimeout("mRotace()",2);
		  document.getElementById("rotButt").value="zastavit otáčení";	
    	}
		else {
  		 document.getElementById("rotButt").value="otáčet";
		 clearInterval(rotTimer);
		 mOtacet=0;	
		}
	}
	function mRotace() {
		 mPOV=svp.getPOV();
		 currentYaw=mPOV.yaw;
		 currentPitch=mPOV.pitch;
  		 currentYaw += 1;
  		 svp.panTo({yaw:currentYaw, pitch:currentPitch});
		 rotTimer=setTimeout("mRotace()",2);
	}
    function addAddressToMap(response) {
      map.clearOverlays();
      if (!response || response.Status.code != 200) {
        alert("Bohužel nemůžu najít adresu.");
      } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
        marker = new GMarker(point);
        //map.addOverlay(marker);
        //marker.openInfoWindowHtml(place.address + '<br>' + '<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
	   mPutInfo("addressinfo",place.address);
       myPOV = {yaw:370.64659986187695,pitch:-10};
	   map.setCenter(point,15);
       svp.setLocationAndPOV(point,myPOV);
       if (textik3) textik3.innerHTML=point;
      }
      vyznacStreetView();          
    }

    // showLocation() is called when you click on the Search button
    // in the form.  It geocodes the address entered into the form
    // and adds a marker to the map at that location.
    function getSVforAddress(address) {
      geocoder.getLocations(address, addAddressToMap);	        
    }
    function showLocation() {
      mq=document.getElementById("srchAddr");
      var address = mq.value;      
      geocoder.getLocations(address, addAddressToMap);	  
      document.getElementById("pxl").src="addsearch.php?ad="+address;	     
    }

   // findLocation() is used to enter the sample addresses into the form.
    function findLocation(address) {      
      document.forms[0].q.value = address;
      showLocation();	   	              
      //vyznacStreetView();      
    }
    function vyznacStreetView() {
    		map.addOverlay(new GStreetviewOverlay());

    }
    function roundToPrecision(inputNum, desiredPrecision){
	 var precisionGuide = Math.pow(10, desiredPrecision);
 	 return( Math.round(inputNum * precisionGuide) / precisionGuide );
	}
     function mRefreshPOV() {      
      if (svp) { 
       //mPOV=svp.getPOV();       
       return true;
      }
      return false;
     }
     function addSV() {
      window.location="svfs.php?svPOV="+precPOV+"&prSV=1"+"&svLOC="+tempLOC;
     }
  	 function VypisData() {  	 
  	 	TimerObject = setTimeout("VypisData()", 2000);
        if (svp) {
                  //mPOV=svp.getPOV();                                                               	 	        		 	 	  	 	  	 	  
 	 	          precPOV=currPitch+'_'+currYaw+'_'+currZoom;
                  //alert('ok');                                              		  		 
        		  if (textik3) tempLOC=textik3.innerHTML;	                  
        		  sendBox=document.getElementById("mik4");                                    
        		  if (sendBox) {    		       
                   sendBox.innerHTML="<form style='position:relative; top:0px; left:0px; z-index:30; margin:0px;padding:0px;' action='#'><input type='hidden' name='svPOV' value='"+precPOV+"'><input type='hidden' name='prSV' value='1'><input type='hidden' name='svLOC' value='"+tempLOC+"'><input type='submit' onmouseover='mRefreshPOV();' class='submit' value='Sdílet / získat odkaz'></form>";
                   //sendBox.innerHTML="<form style='position:relative; top:7px;' action='#'><input type='hidden' name='svPOV' value='"+precPOV+"'><input type='hidden' name='prSV' value='1'><input type='hidden' name='svLOC' value='"+tempLOC+"'><input type='submit' onmouseover='mRefreshPOV();' class='submit' value='Sdílet / získat odkaz'></form>";
                  }
          }
   	 }
   	 function start() {   	 	
   	    mStep=0;
        var startpoint = document.getElementById("startpoint").value;
        var endpoint = document.getElementById("endpoint").value;
		geocoder.getLocations(startpoint, addAddressToMap);
        dirn.loadFromWaypoints([startpoint,endpoint],{getPolyline:true,getSteps:true});
        mPauza=false;
		navStart=document.getElementById("navStart");
		navStart.value="Restart navigace";
        pauzaBox=document.getElementById("pauza");
        pauzaBox.innerHTML="<form action='#' onsubmit='pauzni(); return false;'><input id='pausButt' type='submit' class='submit' value='Pozastavit'  /></form>";  
		clearInterval(animTimer);      
      }	
      function pauzni() {
        if (mPauza) { 
         mPauza=false;
		 pausButt=document.getElementById("pausButt");
		 pausButt.value="Pozastavit";
         //animTimer=setTimeout("animate("+(d+step)+")", tick);
        }
       else { 
       	 pausButt=document.getElementById("pausButt");
		 pausButt.value="Spustit";
       	//clearInterval(animTimer);
        mPauza=true;
	   }       
      }
      function bearing( from, to ) {
       var angle=0;
       
       var lat1 = from.latRadians();
       var lon1 = from.lngRadians();
       var lat2 = to.latRadians();
       var lon2 = to.lngRadians();
       
       var angle = - Math.atan2( Math.sin( lon1 - lon2 ) * Math.cos( lat2 ), Math.cos( lat1 ) * Math.sin( lat2 ) - Math.sin( lat1 ) * Math.cos( lat2 ) * Math.cos( lon1 - lon2 ) );
       if ( angle < 0.0 ) angle  += Math.PI * 2.0;
       
       angle = angle * degreesPerRadian;
       angle = angle.toFixed(1);
       
       return angle;
     }
     function animate(d) { 
        if (carSet!=1) {
         marker = new GMarker(poly.getVertex(0),{icon:car});
         map.addOverlay(marker);
         carSet=1;
        }    
        navigaceTxt=document.getElementById("navigaceTxt");              
        if (!mPauza) {              
	        if (d>eol) {
	          var mKm=((d/1000).toFixed(2)).toString();
	          mKm=mKm.replace(".",",");
	          document.getElementById("step").innerHTML = "<b>Dojeli jste do cíle.<\/b>";
	          document.getElementById("distance").innerHTML =  "Km: "+mKm;
	          if (navigaceTxt && prijezdDoCile!=1) { 
	           prijezdDoCile=1;
             navigaceTxt.innerHTML=navigaceTxt.innerHTML + " Km: "+mKm; + " " + "Dojeli jste do cíle.<br />";
             navigaceTxt.scrollTop = navigaceTxt.scrollHeight;
            }
	          return;
	        }
	        var p = poly.GetPointAtDistance(d);
	        p1=p;
	          map.panTo(p);	          
	          if (textik3) textik3.innerHTML=""+p+"";
	        //sv zoom
	        if (mStep>30) {
	         if (p0 && p1) {	          
	          mBearing=bearing(p0,p1);
	          myPOV = {yaw:mBearing,pitch:-10};
	         }	                  
	         else {
	          myPOV = {yaw:370.64659986187695,pitch:-10};
	         }
	         svp.remove();
	         svp.setLocationAndPOV(p,myPOV);	         
	         mStep=0;
	        }
	      	//sv zoom
	      	mStep++;
	        marker.setPoint(p);
	        var mKm=((d/1000).toFixed(2)).toString();
	        mKm=mKm.replace(".",",");
	        document.getElementById("distance").innerHTML =  "Km: "+mKm+speed;	        
	        if (stepnum+1 < dirn.getRoute(0).getNumSteps()) {
	          if (dirn.getRoute(0).getStep(stepnum).getPolylineIndex() < poly.GetIndexAtDistance(d)) {
	            stepnum++;
	            var steptext = dirn.getRoute(0).getStep(stepnum).getDescriptionHtml();
	            document.getElementById("step").innerHTML = "<b>Dále:<\/b> "+steptext;
	            if (navigaceTxt) { 
               navigaceTxt.innerHTML=navigaceTxt.innerHTML + "\n Km: "+mKm+speed + " " + "Dále: "+steptext+" <br />";
               navigaceTxt.scrollTop = navigaceTxt.scrollHeight;
              }
	            var stepdist = dirn.getRoute(0).getStep(stepnum-1).getDistance().meters;
	            var steptime = dirn.getRoute(0).getStep(stepnum-1).getDuration().seconds;
	            var stepspeed = ((stepdist/steptime) * 3.6).toFixed(0);
	            //step = stepspeed/2.5;            
	            //speed = "<br>Aktuální rychlost: " + stepspeed +" km/h";
	          }
	        } else {
	          if (dirn.getRoute(0).getStep(stepnum).getPolylineIndex() < poly.GetIndexAtDistance(d)) {
	            document.getElementById("step").innerHTML = "<b>Příjezd do cíle.<\/b>";
	            if (navigaceTxt) { 
               navigaceTxt.innerHTML=navigaceTxt.innerHTML + "\n Km: "+mKm+speed + " " + "Příjezd do cíle. <br />";
               navigaceTxt.scrollTop = navigaceTxt.scrollHeight;
              }
	          }
	        }	     
	     p0=p;	     	     
		 animTimer=setTimeout("animate("+(d+step)+")", tick);
		}
		else { 	 	 	     
		 animTimer=setTimeout("animate("+(d)+")", tick);
		}		        
   }
    function animateMap(mLat,mLng,curZoom,endZoom) {     
     currMap.setCenter(new GLatLng(mLat,mLng),curZoom);     
     if (curZoom<endZoom) {
      curZoom+=2;
      fcall="animateMap("+mLat+","+mLng+","+curZoom+","+endZoom+")";
      //alert(fcall);
      animMapTimer=setTimeout(fcall,3000);  
     }          
    }
    function mapClicked(overlay,latlng,overlaylatlng) {
      if (latlng) {        
        geocoder.getLocations(latlng, function(addresses) {
          if(addresses.Status.code != 200) {
            alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());
          }
          else {
            address = addresses.Placemark[0];
            var myHtml = address.address;
            var myHtml2 = address.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
            mPutInfo("infoSVtext","" + myHtml+" "+myHtml2 );
            //outText("infoPanel",myHtml);
            /*
            map.openInfoWindow(latlng, myHtml);
            */
          }
        });
      }
      
      if (latlng != null && latlng.x == mouse_latlng.x && latlng.y == mouse_latlng.y) {                    
	                        var point = new GLatLng( latlng.y, latlng.x );                                            
	                } else if ( overlaylatlng != null ) {                
	                        var point = new GLatLng( overlaylatlng.y, overlaylatlng.x );
	                } else if ( mouse_latlng != null ) {
	                        var point = new GLatLng( mouse_latlng.y, mouse_latlng.x );
	                }
      if (point) {	                 
			          svc.getNearestPanorama(point, function(reply) {
			            if (reply.code = 200) {
			              if (reply.Location) {
			                svp.remove();
			                svp.setLocationAndPOVFromServerResponse(reply);
			                var mPOV=svp.getPOV();                
			      	 		    if (textik3) textik3.innerHTML=reply.location.latlng;
						    	    mLat=reply.location.latlng.lat();
							        mLng=reply.location.latlng.lng();
			              } else {
			                if (address) getSVforAddress(address);
                            //mPutInfo("infoSVtext","<br><i>Neoznacili jste oblast pokrytou streetview. Zkuste kliknout kousek vedle do zamodrené oblasti.<br> TIP: pujde vám to lépe pri vetším priblížení mapy.</i>"); 
			              }                           
			            } else {
			              GLog.write("Error : "+reply.code);
			            }
			          } );
       }
    }
     function mSetUpMap(s,d,sP,dP,yP,pP,mZoom,nazevPan,initni,mapObjID) {
     	  mLat=sP;
		    mLng=dP;
             zoom=16;
             initZoom=4;
	    if (initni==true) {	       
	      	zoom=initZoom;
            mZoom=0;
        }		  
	      geocoder = new GClientGeocoder();
	      svc = new GStreetviewClient();       
	      var fenwayPark = new GLatLng(sP,dP);
	      var myPOV = {yaw:yP,pitch:pP,zoom:mZoom};
        currYaw=yP;
        currPitch=pP;
        
        currZoom=mZoom;
		     panoramaOptions = { latlng:fenwayPark, pov:myPOV, enableFullScreen:true };      
	      //textik3.innerHTML="(50.080022, 14.429666)";
	      //<![CDATA[    
	      map = new GMap2(document.getElementById(""+mapObjID));
	      map.addMapType(G_PHYSICAL_MAP);//To be STREETVIEW BUTTON FOR OVERLAY (GStreetviewOverlay)
	   

	      map.setCenter(new GLatLng(s,d),zoom);
	      map.addControl(new GMapTypeControl());
	      map.addControl(new GLargeMapControl());
	      vyznacStreetView();
	      
	      svp = new GStreetviewPanorama(document.getElementById(nazevPan),panoramaOptions);          
          GEvent.addListener(svp,"error",function( error) {
                    //alert('error' +error+' '+sP);
	            }
	      );
	      GEvent.addListener(map,"click",mapClicked);
	                
	      GEvent.addListener(map,"mousemove",function( latlng ) {
	                if ( latlng != null ) {
	                        mouse_latlng = latlng;
	                }
	            }
	      );
	      
	      GEvent.addListener(svp,"initialized",function(loc) {        
	          if (textik3) textik3.innerHTML="("+loc.latlng.lat()+", "+loc.latlng.lng()+")";
				    mLat=loc.latlng.lat();
				    mLng=loc.latlng.lng();
                    if (!zoom) zoom=16;
                    if (firstInit==1 && initni==true) {
                        zoom=11;
                        firstInit=0;                        
                        endZoom=16;
                        currMap=map;                        
                        animateMap(mLat,mLng,initZoom,endZoom);
                    }
				    
	      });   
	    
	      GEvent.addListener(dirn,"load", function() {
	        //document.getElementById("controls").style.display="none";
	        poly=dirn.getPolyline();
	        eol=poly.Distance();
	        map.setCenter(poly.getVertex(0),17);
	        map.addOverlay(new GMarker(poly.getVertex(0),G_START_ICON));
	        map.addOverlay(new GMarker(poly.getVertex(poly.getVertexCount()-1),G_END_ICON));	        
	        var steptext = dirn.getRoute(0).getStep(stepnum).getDescriptionHtml();	        
	        marker = new GMarker(poly.getVertex(0),{icon:car});
         	map.addOverlay(marker);	       
	        carSet=1;
	        document.getElementById("step").innerHTML = steptext;
	        setTimeout("animate(0)",2000);  // Allow time for the initial map display
	        navigaceTxt=document.getElementById("navigaceTxt");
          navigaceTxt.innerHTML="";
          prijezdDoCile=0; 
	      });
	
	      GEvent.addListener(dirn,"error", function() {
	        alert("Neznámá lokace. Kód: "+dirn.getStatus().code);
	      });
          
          GEvent.addListener(svp, 'yawchanged', function(newyaw){
           currYaw=newyaw;
          });
        
          GEvent.addListener(svp, 'pitchchanged', function(newpitch) {
           currPitch=newpitch;
          });
        
          GEvent.addListener(svp, 'zoomchanged', function(newzoom) {
           currZoom=newzoom;
          });	      
     }
     function mSetUpMap2Procisti(s,d,sP,dP,yP,pP,mZoom,nazevPan,initni,id) {
     	  mLat=sP;
		  mLng=dP;
	      geocoder = new GClientGeocoder();
	      svc = new GStreetviewClient();       
	      var fenwayPark = new GLatLng(sP,dP);
	      var myPOV = {yaw:yP,pitch:pP,zoom:mZoom};
		  panoramaOptions = { latlng:fenwayPark, pov:myPOV, enableFullScreen:true };       
	      svp = new GStreetviewPanorama(document.getElementById(nazevPan),panoramaOptions); 
          GEvent.addListener(svp,"error",function( error) {
                    //alert('error' +error+' '+id);
                    var mImg;
                    mImg = document.getElementById("img"+id);
                    if (mImg) mImg.src='delsv.php?code='+id;                           
	            }
	      );         	   	      	
     }       
     function mSetUpMap2(s,d,sP,dP,yP,pP,mZoom,nazevPan,initni) {
     	  mLat=sP;
		  mLng=dP;
	      geocoder = new GClientGeocoder();
	      svc = new GStreetviewClient();       
	      var fenwayPark = new GLatLng(sP,dP);
	      var myPOV = {yaw:yP,pitch:pP,zoom:mZoom};
		  panoramaOptions = { latlng:fenwayPark, pov:myPOV, enableFullScreen:true };       
	      svp = new GStreetviewPanorama(document.getElementById(nazevPan),panoramaOptions);                  	   	      	
     }
     function mDisplay(mID) {      
      obj=document.getElementById(mID);             
      if (obj) {      	      	
        if (obj.style.display=="none") {          
          obj.style.display="block";                
        }
        else obj.style.display="none";
                   
       }       
     }
     function mDisplay2(mID,mID2) {      
      obj=document.getElementById(mID);
	  obj2=document.getElementById(mID2);                   
      if (obj) {      	      	
        if (obj.style.display=="none") {          
          obj.style.display="block";
          obj2.style.display="none";                
        }
        else { 
         obj.style.display="none";
         obj2.style.display="block";
        }                   
       }       
     }
      function mDisplay3(mID) {      
      obj=document.getElementById(mID);             
      if (obj) {     	      	
        if (obj.style.height=="1px") {          
         obj.style.height="250px";
        }
        else {
             obj.style.height="1px";            
            }
       }       
     }
	 function mPutInfo(mID,text) {      
      obj=document.getElementById(mID);             
      if (obj) {      	      	
          obj.innerHTML=text;                                   
       }       
     }
     function initialize() {            	
      textik3=document.getElementById("mik3");
      TimerObject = setTimeout("VypisData()", 1000);
	  if (l1=="") l1=50.080022;
	  if (l2=="") l2=14.429666;
	  if (p1=="") p1=165.64659986187695;
	  if (p2=="") p2=-3;
	  if (p3=="") p3=0;
      mSetUpMap(l1,l2,l1,l2,p1,p2,p3,"panorama",true,"map");
	  mLat=l1;
	  mLng=l2;        
    //]]>
    }    
