// JScript File
var map;
var mkr_wpt = [ ] ;		// Waypoints Markers
var mkr_km = [ ];     // Distance (km) Markers
var route;
var MoviePos = 999999;


function load(file, xzoom, xtype)
{
    if (GBrowserIsCompatible())
    {
      	map = new GMap2(document.getElementById("map"));
      	var mt = map.getMapTypes();
        for (var i=0; i<mt.length; i++) {
            mt[i].getMinimumResolution = function() {return 10;}
            mt[i].getMaximumResolution = function() {return 17;}
        }
        map.enableScrollWheelZoom();
        map.addControl(new GLargeMapControl());
        map.addControl(new GHierarchicalMapTypeControl()); 
        map.addControl(new K_CrossControl());
        map.addMapType(G_PHYSICAL_MAP);
        if(xtype == null)
        {
            map.setMapType(G_PHYSICAL_MAP);               
        }
        else
        {
           map.setMapType(xtype);
        }
        map.addMapType(G_SATELLITE_3D_MAP);
        
        
   		OSMGetTileUrl=function(a,b){	
			       return 'http://a.tile.openstreetmap.org/'+b+'/'+a.x+'/'+a.y+'.png';
      }

      OCMGetTileUrl=function(a,b){	
              return 'http://b.andy.sandbox.cloudmade.com/tiles/cycle/'+b+'/'+a.x+'/'+a.y+'.png';
		  }
		
    
    OSMcopyright = new GCopyrightCollection('<a href="http://www.openstreetmap.org/">&#169; OpenStreetMap contributors, CC-BY-SA</a>');
    OSMcopyright.addCopyright(new GCopyright(
        'OpenStreetMap',
        new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
        0,
        '  '
    ));  

    OCMcopyright = new GCopyrightCollection('<a href="http://www.opencyclemap.org/">&#169; OpenStreetMap</a>');
    OCMcopyright.addCopyright(new GCopyright(
        'OpenCycleMap',
        new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
        0,
        '  '
    ));
		
		var OSMtilelayers = [new GTileLayer(OSMcopyright,1,17)];
		OSMtilelayers[0].getTileUrl = OSMGetTileUrl;
    var OCMtilelayers = [new GTileLayer(OCMcopyright,1,17)];
		OCMtilelayers[0].getTileUrl = OCMGetTileUrl;
		
		
    var osmmap = new GMapType(OSMtilelayers, G_SATELLITE_MAP.getProjection(), 'O.S.M.');
		map.addMapType(osmmap);
    var ocmmap = new GMapType(OCMtilelayers, G_SATELLITE_MAP.getProjection(), 'O.C.M.');
		map.addMapType(ocmmap);

        GDownloadUrl(file,
        function(data, responseCode) {
            var xml = GXml.parse(data);
            var trk = xml.documentElement.getElementsByTagName("trk");

            //  POLYLINE
            var trkseg = trk[0].getElementsByTagName("trkseg");
            var trkpt = trkseg[0].getElementsByTagName("trkpt");

            var points = [];
            var dists = [];
            var distance = 0;
            for (var i = 0; i <= trkpt.length - 1; i++) {
                // vertici
                var p_curr = new GLatLng(parseFloat(trkpt[i].getAttribute("lat")),
                                        parseFloat(trkpt[i].getAttribute("lon")));
                points.push(p_curr);

                if (i < trkpt.length - 1) {
                    var p_next = new GLatLng(parseFloat(trkpt[i + 1].getAttribute("lat")),
                                        parseFloat(trkpt[i + 1].getAttribute("lon")));
                    distance += p_curr.distanceFrom(p_next);
                    var wptd = xml.documentElement.getElementsByTagName("wpt");

                    for (var z = 0; z < wptd.length; z++) {
                        if (wptd[z].getAttribute("lat") == trkpt[i].getAttribute("lat") &&
                        wptd[z].getAttribute("lon") == trkpt[i].getAttribute("lon")) {
                            dists.push(distance);
                        }
                    }
                }

            }
            var poly = new GPolyline(points, "#0000ff", 4, 0.6);
            map.addOverlay(poly);

            var bounds = poly.Bounds();
            map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));


            route = poly;



            // WAYPOINTS MARKERS  
            var baseIcon = new GIcon();
            baseIcon.shadow = "http://www.podisticasavonese.it/admin/cflags/shadow50.png";
            baseIcon.iconSize = new GSize(20, 34);
            baseIcon.shadowSize = new GSize(37, 34);
            baseIcon.iconAnchor = new GPoint(9, 34);
            baseIcon.infoWindowAnchor = new GPoint(9, 2);
            baseIcon.infoShadowAnchor = new GPoint(18, 25);

            

            var wpt = xml.documentElement.getElementsByTagName("wpt");
            for (var i = 0; i < wpt.length; i++) {
                var name = wpt[i].getElementsByTagName("name");
                var link = wpt[i].getElementsByTagName("link");
                var hasInnerText = false;
                //infowindow
                if (name.length > 0) {
                    var icon = new GIcon(baseIcon);
                    icon.image = link[0].getAttribute("href");

                    //testo e immagine
                    var desc;
                    if (link[1] != null) {
                        //true IE, false Mozilla
                        hasInnerText = (name[0].text != undefined) ? true : false;

                        if (!hasInnerText) {   // ok in firefox
                            desc = '<a href="' + link[1].getAttribute("href") + '"><img src="' + link[1].getAttribute("href") + '" width="200px" height="151px" style="border:none" alt=""/></a><br/>' +
                                   '<strong>' + name[0].textContent + '</strong><br/>' +
                                   wpt[i].getElementsByTagName("ele")[0].textContent + ' metri s.l.m.<br/>';
                        }
                        else {   // ok in explorer  
                            desc = '<a href="' + link[1].getAttribute("href") + '"><img src="' + link[1].getAttribute("href") + '" width="200px" height="151px" style="border:none" alt=""/></a><br/>' +
                                   '<strong>' + name[0].text + '</strong><br/>' +
                                   wpt[i].getElementsByTagName("ele")[0].text + ' metri s.l.m.<br/>';
                        }
                    }
                    else {
                        //true IE, false Mozilla
                        hasInnerText = (name[0].text != undefined) ? true : false;
                        if (!hasInnerText) {   // ok in firefox
                            desc = '<strong>' + name[0].textContent + '</strong><br/>' +
                                    wpt[i].getElementsByTagName("ele")[0].textContent + ' metri s.l.m.<br/>';
                        }
                        else {   // ok in explorer
                            desc = '<strong>' + name[0].text + '</strong><br/>' +
                                    wpt[i].getElementsByTagName("ele")[0].text + ' metri s.l.m.<br/>';
                        }
                    }
                }

                // Scrive la distanta del waypoint
                if (i > 0) {
                    if (isNaN(dists[i]) == false)
                        desc += Math.round(dists[i] / 10) / 100 + ' km dalla partenza';
                }
                // crea il marker del waypoint
                var loc_curr = new GLatLng(parseFloat(wpt[i].getAttribute("lat")),
                    parseFloat(wpt[i].getAttribute("lon")));

                var marker = createMarker(loc_curr, desc, icon);
                mkr_wpt.push(marker);
                
            }
            // Marker animazione
            //var runner = new GIcon(baseIcon);
            //runner.image = "http://www.podisticasavonese.it/admin/cflags/runner.png";
            //ball = new GMarker(poly.getVertex(1), runner);


            //  KM MARKERS
            var dist_tot = poly.Distance();
            for (var i = 0; i < dist_tot; i += 1000) {
                var mileIcon = new GIcon();
                mileIcon.iconSize = new GSize(17, 17);
                mileIcon.shadowSize = new GSize(1, 1);
                mileIcon.iconAnchor = new GPoint(12, 12);
                mileIcon.infoWindowAnchor = new GPoint(0, 0);
                var marker_km;
                var point = poly.GetPointAtDistance(i);
                if (point) {
                    mileIcon.image = "http://www.podisticasavonese.it/admin/cflags/mile_" + i / 1000 + ".png";
                    marker_km = new GMarker(point, mileIcon);
                    mkr_km.push(marker_km);
                }
            }

            // Scrive i markers
            var mm = new GMarkerManager(map);
            mm.addMarkers(mkr_km, 14, 17);
            mm.addMarkers(mkr_wpt, 14, 17);
            mm.refresh();

            // Scrive la distanza totale
            distanza = dist_tot / 1000;
            distanza = Math.round(distanza * 10) / 10;
            distanza += '';
            document.getElementById("distance").innerHTML = "lunghezza percorso: " + distanza + " km.";

        });
    }
}
// Disegna infowindow
function createMarker(point, html, icon)
{
    var marker = new GMarker(point, icon);
    GEvent.addListener(marker, "click", function()
       {
          marker.openInfoWindowHtml(html);
       });
    return marker;
}


function infoLink(i)
{
    var myTextField = document.getElementById('ctl00_ContentPlaceHolder1_mapelev');
    if (myTextField != null)
    {
        if (myTextField.src.search(/wpt/) > 0)
        {
            var temp = myTextField.src;
            temp = temp.substring(0, temp.indexOf('&'));
            myTextField.src = temp + "&wpt=" + i;
        }
        else
        {
            myTextField.src += "&wpt=" + i;
        }
    }
    else
    {
        if (map != null)
        {
            GEvent.trigger(mkr_wpt[i], "click");
        }
         
    }
}    
function K_CrossControl(image,size)
{
	this.size=size?size:new GSize(20,20);
	this.image=image?image:"http://www.podisticasavonese.it/images/cross.gif";
	this.div=document.createElement("div");
	this.img=document.createElement("img");
	this.div.appendChild(this.img);
	this.div.style.position="absolute";
	this.img.style.position="absolute";
}
K_CrossControl.prototype=new GControl(true,false);
K_CrossControl.prototype.initialize=function(map)
{
	if(this.img.src!=this.image)
	{
		this.img.src=this.image;
	}
	this.img.width=this.size.width;
	this.img.height=this.size.height;
	this.map=map;
	this.resetSize();
	map.getContainer().appendChild(this.div);
	//GEvent.bind(map,"resize",this,this.resetSize());
	
	GEvent.addListener(map, "moveend", function() {
       var lat_center = map.getCenter().lat().toFixed(5);
       var lon_center = map.getCenter().lng().toFixed(5);
       document.getElementById("coordinate").innerHTML = "lat=" +lat_center + ", lon=" + lon_center;
	});
	
	
	return this.div;
}
K_CrossControl.prototype.resetSize=function()
{
	var size=this.map.getSize();
	this.img.style.left=(size.width/2-this.size.width/2)+"px";
	this.img.style.top=(size.height/2-this.size.height/2)+"px";
}
K_CrossControl.prototype.getDefaultPosition=function()
{
	return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0));
}
function StartMovie() 
{
   var punti = route.getVertexCount();
   map.setZoom(14);
   if (MoviePos > punti) {
      MoviePos = 0;
      document.images['StartStop'].src = 'images/stop.png';
      PlayMovie();
   } else {
      MoviePos = punti + 1;
      document.images['StartStop'].src = 'images/start.png';
   }
}
function PlayMovie() {
   var punti = route.getVertexCount();
   if (MoviePos < punti-1) 
   {
      MoviePos = Math.min(MoviePos + Math.round(punti/80), punti-1);
      if (MoviePos < punti-1)
      {
         map.panTo(route.getVertex(MoviePos));
         setTimeout("PlayMovie();",300);
      }
      else 
      {
         document.images['StartStop'].src = 'images/start.png';
      }
   }
}
