
// Inicialización de variables.

if (lugar=='usa'){
  var lat_ini   = 40.756054;
  var lon_ini   = -73.986951;
  var dir       = 'Direction:';
  var elevacion = 'Pitch:';
  var azimut    = 'Orientation:';
  var latitud   = 'Coordinates:';
  var longitud  = 'Longitude:';
  var idi       ='en';
}

if (lugar=='mundo'){
  var lat_ini   = 40.416741;
  var lon_ini   = -3.70325;
  var dir       = 'Dirección:';
  var elevacion = 'Elevación:';
  var azimut    = 'Orientación:';
  var latitud   = 'Coordenadas:';
  var longitud  = 'Longitud:';
  var idi       ='sp';
}  


var myPano;
var overlayInstance = null;
var panoClient;
var nextPanoId;
var map      	= null;
var geocoder 	= null;
var lati     	= null;
var long     	= null;
var direccion   = null;
var direccion2  = null;
var semaforo 	= 0;
var migeocoder 	= 0;
var marker;

var milatitud=0;
var milongitud=0;
var miazimut=0;
var mialtura=0;
var mizoom=0;
var midireccion;
var midireccion2;
var latitud_sin_calle=0;
var contador=0;
  

function initialize() {
  
  geocoder = new GClientGeocoder();
  
  var fenwayPark = new GLatLng(lat_ini,lon_ini); 
  var fenwayPOV = {yaw:370.64659986187695,pitch:-20};
 
  panoClient = new GStreetviewClient();      
     
  map = new GMap2(document.getElementById("map_canvas"));
  map.setCenter(fenwayPark, 15);
 // map.addControl(new GSmallMapControl());


  	   	              var customUI = map.getDefaultUI();
        // Remove MapType.G_HYBRID_MAP
      //  customUI.maptypes.hybrid = false;
        map.setUI(customUI);



  var guyIcon = new GIcon(G_DEFAULT_ICON);
  guyIcon.image = "http://maps.gstatic.com/mapfiles/cb/man_arrow-0.png";
  guyIcon.transparent = "http://maps.gstatic.com/mapfiles/cb/man-pick.png";
  guyIcon.imageMap = [
         26,13, 30,14, 32,28, 27,28, 28,36, 18,35, 18,27, 16,26,
         16,20, 16,14, 19,13, 22,8
      ];
  guyIcon.iconSize = new GSize(49, 52);
  guyIcon.iconAnchor = new GPoint(25, 35);  // near base of guy's feet
  guyIcon.infoWindowAnchor = new GPoint(25, 5);  // top of guy's head
 
  marker = new GMarker(fenwayPark, {icon: guyIcon, draggable: true});
  map.addOverlay(marker);
  lastMarkerLocation = fenwayPark;
  GEvent.addListener(marker, "dragend", onDragEnd);
  
  GEvent.addListener(map, "click", function(overlay,latlng) {
      generaCodigo();
      panoClient.getNearestPanorama(latlng, showPanoData);
      myPano.setLocationAndPOV(latlng);
      semaforo=1;
  });
      
  myPano = new GStreetviewPanorama(document.getElementById("pano"));
  myPano.setLocationAndPOV(fenwayPark, fenwayPOV);
  GEvent.addListener(myPano, "error", handleNoFlash);  
  panoClient.getNearestPanorama(fenwayPark, showPanoData);
  GEvent.addListener(myPano, "yawchanged", onYawChange); 

  GEvent.addListener(myPano, "initialized", function(pano) {
    milatitud=pano.latlng.lat();
    milongitud=pano.latlng.lng()
    generaCodigo();
    panoClient.getNearestPanorama(pano.latlng, showPanoData);
  });

  GEvent.addListener(myPano, 'pitchchanged', function(newpitch) {
    mialtura=newpitch;
    generaCodigo();
  });

  GEvent.addListener(myPano, 'zoomchanged', function(newzoom) {
    mizoom=newzoom;
    generaCodigo();
  });

}


function toggleOverlay() {
   if (!overlayInstance) {
     overlayInstance = new GStreetviewOverlay();
     map.addOverlay(overlayInstance);
   } else {
     map.removeOverlay(overlayInstance);
     overlayInstance = null;
   }
}
 

function onYawChange(newYaw) {
     var GUY_NUM_ICONS = 16;
     var GUY_ANGULAR_RES = 360/GUY_NUM_ICONS;
     if (newYaw < 0) {
       newYaw += 360;
     }
     guyImageNum = Math.round(newYaw/GUY_ANGULAR_RES) % GUY_NUM_ICONS;
     guyImageUrl = "http://maps.gstatic.com/mapfiles/cb/man_arrow-" + guyImageNum + ".png";
     marker.setImage(guyImageUrl);

    miazimut=newYaw;
     generaCodigo();
}
   

function onNewLocation(lat, lng) {
     var latlng = new GLatLng(lat, lng);
     marker.setLatLng(latlng);
     generaCodigo();
}
   

function onDragEnd() {
     var latlng = marker.getLatLng();
     panoClient.getNearestPanorama(latlng, showPanoData);
     myPano.setLocationAndPOV(latlng); 
     semaforo=1;
     generaCodigo();
}


function generaCodigo() {

     document.getElementById("direccion").innerHTML="<b><font size='2' face='Arial' color='green'>"+ midireccion+"</font></b><br>";
     document.getElementById("latitud").innerHTML   ="<font size='2' face='Arial'>"+latitud+" <font color='blue'>(" + milatitud + ", " + milongitud +" ) </font>";
     document.getElementById("azimut").innerHTML= "<font size='2' face='Arial'>"+azimut +" <font color='red'>(" + miazimut +", " + mialtura +" ) </font>&nbsp;&nbsp; Zoom: <font size='2' face='Arial' color='red'>" + mizoom+"<br></font>";

     document.form1.Username.value ='http://www.mundivideo.com/vc.htm?id='+idi+'&lat='+milatitud+'&lng='+milongitud+'&yaw='+miazimut+'&pitch='+mialtura+'&zoom='+mizoom+'&dir='+midireccion;
     document.form1.Browser.value ='<iframe width="100%" height="100%" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://www.mundivideo.com/vc.htm?id='+idi+'&lat='+milatitud+'&lng='+milongitud+'&yaw='+miazimut+'&pitch='+mialtura+'&zoom='+mizoom+'&dir='+midireccion+'"></iframe>';

}      

 
function showPanoData(panoData) {
   if (panoData.code != 200) {
	      /*    GLog.write('showPanoData: Server rejected with code: ' + panoData.code);*/	     
	   if (migeocoder==1){
	      sinCalle();
	    }
	    else
	    {
	      alert ('Sin cobertura de Street View');
	       return;
	    }
	     
	  }
	  else {
	     migeocoder=0;
	     contador=0;
	     latitud_sin_calle=0;
	      /*  nextPanoId = panoData.links[0].panoId;*/
	      
	  	  geocoder.getLocations(panoData.location.latlng, function(addresses) {
	          if(addresses.Status.code != 200) {
	                /*  alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());*/
	  	              alert ("no");
	                	}
	                else 
	                	{
	     			
	     			var latlng = new GLatLng(panoData.Location.lat, panoData.Location.lng);
	  			  marker.setLatLng(latlng);
	      		lastMarkerLocation = latlng;
	  
	      		address = addresses.Placemark[0];
	          var myHtml = address.address;

	          var direccion ='<font size="3" face="Arial" color="blue"><br>'+ myHtml+'</font>';
	          var direccion2 ='<font size="3" face="Arial" color="green">'+ myHtml+'</font>';
	  
	      		marker.openInfoWindowHtml(direccion);
	      			
	      		midireccion=myHtml;
	      		midireccion2=direccion2;
	      			
	      		milatitud=latlng.lat();
	          milongitud=latlng.lng();
	      		generaCodigo();
	  			    
	      		 }
	  
	            });
	      
    }
  } 
  
  
function sinCalle(){

          if (contador==20){
           migeocoder=0;
          contador=0;
          latitud_sin_calle=0;
          alert ('Sin cobertura de Street View');
     //     return;
          }
          else
          {
      latitud_sin_calle=latitud_sin_calle +lati - 0.009;
      contador=contador+1;

        var punto = new GLatLng(latitud_sin_calle, long); 
      marker.setLatLng(punto);

            panoClient.getNearestPanorama(punto, showPanoData);
            myPano.setLocationAndPOV(punto); 
            }
      
}
  

function handleNoFlash(errorCode) {
      if (errorCode == 603) {
        alert("Error: Flash doesn't appear to be supported by your browser");
        return;
      }
}  



//---------------------------------------------------------------------------------------//
// Calcula la latitud en grados, minutos y segundos.
//---------------------------------------------------------------------------------------//
function roundNumber(rnum, rlength){
  var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
  return newnumber; 
}

function conv_grados(radianes, coord){
			
			if (radianes < 0){
			    radianes=radianes*(-1);
				if (coord=="latitud"){
						letra =" S";
					} else {
						letra =" W";
					}	
			}
			else
			{
				if (coord=="latitud"){
						letra =" N";
					} else {
						letra =" E";
					}	
			}
			

			grados	= Math.abs(Math.floor(radianes));
			minutos_d	= (radianes-Math.floor(radianes))*60;	
			minutos		= Math.floor((radianes-Math.floor(radianes))*60);		
			segundos	= roundNumber(((minutos_d - Math.floor(minutos_d))*60),2);
			
			valor_g		= grados+"º "+minutos+"' "+segundos+'" '+letra;

			return (valor_g);
			
		}


//---------------------------------//
//           GEOCODER
//---------------------------------//
function showAddress(address, zoom) {
    		  
    		if (geocoder) {
        		geocoder.getLatLng(address,
          			
          			function(point) {
            			
            			if (!point) {
            				alert(address + " no se ha encontrado");
            			} else {

            				map.setCenter(point, zoom);

					lati	= point.y;
					long	= point.x;
 					semaforo=1;
 					migeocoder=1;
 					
 			
 					
 					panoClient.getNearestPanorama(point, showPanoData);
 					myPano.setLocationAndPOV(point); //////
 
 	              		}
 		              	}
 		       	);      	
  	    	}
}    
//---------------------------------//
//     FIN DE GEOCODER
//---------------------------------//   