//<![CDATA[

   _mSvgEnabled = true;
   _mSvgForced  = true;

    var map = null;
    var geocoder = 0;
    var points = [];
    var old_point = null;
    var kma = 0.0;
    var mia = 0.0;

    function clear_map(reg) 
    {
	if (map != null) {
		map.clearOverlays();
		if (reg==0) { 
			document.getElementById("ptdesc").value = "";
		}
	} if (points.length == 0) {
		return;
	}

	points.splice(0, points.length);	// delete elements from array
    }

    function generate_xml() 
    {
	var txt = "";
	var smm = 0.0;
	var skm = 0.0;

	if (points.length == 0) 
	{
		alert("Error! First, Put points on map.");
		return;
	}

	document.getElementById("ptdesc").value = "";

   	txt = "<markers>\n  <remark name=\"..Route name..\" />\n";

    	for (var i = 0; i < points.length; i++) 
	{

		txt = txt + "  <marker name=\"" + i + "\"";

		var lt = "" + points[i].y;
		lt = lt.substring(0, lt.indexOf(".") + 7);
		var ln = "" + points[i].x;
		ln = ln.substring(0, ln.indexOf(".") + 7);

		txt = txt + " lat=\"" + lt + "\" lng=\"" + ln +"\"";

		if (i > 0) {
			var dis = dist_calc(points[i].y, points[i].x, points[i-1].y, points[i-1].x);
			txt = txt + " dist=\"" + dis + "\"";
			smm = smm + mia;
			skm = skm + kma;
			
		} else {
			txt = txt + " dist=\"0.0km / 0.0mi\"";
		}
		txt = txt + " />\n"; 
    	}

	var sskm = "" + skm;
	sskm = sskm.substring(0, sskm.indexOf(".") + 4);
	var ssm = "" + smm;
	ssm = ssm.substring(0, ssm.indexOf(".") + 4);
	txt = txt + "  <total distance=\""+ sskm + "km / " + ssm + "mi \" />\n";

	txt = txt +"</markers>\n";

	document.getElementById("ptdesc").value = txt;
	document.getElementById("ptdesc").focus();

    }

    function mouseMove(mousePt) {
    	var center = mousePt;
        document.getElementById("message").innerHTML = center.toString();
    }

    function load() {

     if (GBrowserIsCompatible()) {

    	// Geocoder init
    	geocoder = new GClientGeocoder();

	map = new GMap2(document.getElementById("map"), {draggableCursor:"crosshair"});

        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
 	map.addControl(new GScaleControl());

	map.enableDoubleClickZoom();
	map.enableScrollWheelZoom();
	map.addMapType(G_PHYSICAL_MAP);
	map.addMapType(G_SATELLITE_3D_MAP);
        
	map.setCenter(new GLatLng(0.0,0.0), 1);

	GEvent.addListener(map, "mousemove", mouseMove);

        GEvent.addListener(map, "click", function(overlay, point) {
          
	var marker;
	var msg;

	if (overlay) {

            map.closeInfoWindow();

	    overlay.openInfoWindowHtml("Point deleted from map.");	    

            for (var i = 0; i < points.length; i++) {

		if ((points[i] == overlay.getPoint())) {
//			points[i] = null;
			points.splice(i, 1);		// delete elements from array
			break;
		}
	    }
	    map.removeOverlay(overlay);

        } else {

	    marker = new GMarker(point, {draggable: true});

            GEvent.addListener(marker, "dragstart", function() {
		old_point = marker.getPoint();
          	map.closeInfoWindow();
            });

            GEvent.addListener(marker, "dragend", function() {
		var p = marker.getPoint();
		msg = "Lat = "+p.y+"<br>Lon = "+p.x;
          	marker.openInfoWindowHtml("Point position changed to <br>"+msg);
		
            	for (var i = 0; i < points.length; i++) {
			if ((points[i].x == old_point.x) && (points[i].y == old_point.y)) {
				points[i] = p;
				break;
			}
		}

            });

	    points.push(point);
            map.addOverlay(marker);
	    msg = "Lat = "+point.y+"<br>Lon = "+point.x;
            marker.openInfoWindowHtml("Point create at <br>"+msg);

	    // add line from point to point
	    // map.addOverlay(new GPolyline(points, "#4444ff", 3, 1)); 

	}
       });

      }
    }

    function load_xml() {

      if (GBrowserIsCompatible()) {
	
	clear_map(1);
	
	// Creates a marker at the given point
        function createMarker(point) {
	
          var marker = new GMarker(point, {draggable: true});

            GEvent.addListener(marker, "dragstart", function() {
		old_point = marker.getPoint();
          	map.closeInfoWindow();
            });

            GEvent.addListener(marker, "dragend", function() {
		var p = marker.getPoint();
		msg = "Lat = "+p.y+"<br>Lon = "+p.x;
          	marker.openInfoWindowHtml("Point position changed to <br>"+msg);
		
            	for (var i = 0; i < points.length; i++) {
			if ((points[i].x == old_point.x) && (points[i].y == old_point.y)) {
				points[i] = p;
				break;
			}
		}

            });

          return marker;
        }

	var ttx = document.getElementById("ptdesc").value;
        
	if (ttx != "") {

          var xml     = GXml.parse(ttx);
          var markers = xml.documentElement.getElementsByTagName("marker");

	  // start from first point
	  map.setCenter(new GLatLng(parseFloat(markers[0].getAttribute("lat")),
                                    parseFloat(markers[0].getAttribute("lng"))), 14);

	  // Put data to the map
	  var lat = 0.0, lon = 0.0;
          for (var i = 0; i < markers.length; i++) {
            
	    lat = parseFloat(markers[i].getAttribute("lat"));
	    lon = parseFloat(markers[i].getAttribute("lng"));
	    var point = new GLatLng(lat, lon);
            
	    points.push(point);				// add point to array
	    

	    map.addOverlay(createMarker(point));
          }

	  // add line from point to point
	  // map.addOverlay(new GPolyline(points, "#4444ff", 3, 1)); 

        } else {

	  alert("Load xml to text area first!");

	}

	document.getElementById("map").focus();

     }

    }


// Calculate Distance (all units in degree)
 function dist_calc(lath1, longh1, lath2, longh2) 
 {
  var degtorad = 0.01745329;
  var radtodeg = 57.29577951;

  var lat1 = parseFloat(lath1);
  var lat2 = parseFloat(lath2);
  var long1 = parseFloat(longh1);
  var long2 = parseFloat(longh2);

  var dlong = (long1 - long2);

  var dvalue = (Math.sin(lat1 * degtorad) * Math.sin(lat2 * degtorad)) + (Math.cos(lat1 * degtorad) * Math.cos(lat2 * degtorad) * Math.cos(dlong * degtorad));
  var dd = Math.acos(dvalue) * radtodeg;

  var miles = (dd * 69.16);
  mia = miles;
  var mls = "" + miles;
  mls = mls.substring(0, mls.indexOf(".") + 4);

  var km = (dd * 111.302);
  kma = km;
  var kms = "" + km;
  kms = kms.substring(0, kms.indexOf(".") + 4);
  
  var str = "" + kms +"km / " + mls + "mi";

  return str;
 }

 function addAddressToMap (response) {

      if (!response) {

        alert("Sorry, but I can not find the adress.");

      } else {

	map.setCenter(response, 12);

      }

      geocoder.reset();
 }
 function showLocation(address) 
 {
	if ("" == address) 
	{ 
		alert("Please, place adress first."); 
		return;
	}
	geocoder.getLatLng(address, addAddressToMap);
 }


    function generate_kml() 
    {
	var txt = "", st="", cr="";

	if (points.length == 0) 
	{
		alert("Error! First, Put points on map.");
		return;
	}

	document.getElementById("ptdesc").value = "";

   	st = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://earth.google.com/kml/2.2\">\n";
	st = st + "<Document>\n";
	st = st + "<name>\" ... Track name ...\"</name>\n";

	cr = cr + "<Placemark>\n<Style>\n<LineStyle id=\"khLineStyle989\">\n<color>7f0000ff</color>\n<width>5</width>\n";
	cr = cr + "</LineStyle>\n</Style>\n<LineString>\n<tessellate>1</tessellate>\n<coordinates>\n";

    	for (var i = 0; i < points.length; i++) 
	{

		txt = txt + "<Placemark>\n";
		txt = txt + "<name>" + i + "</name>\n<Point>\n";

		var lt = "" + points[i].y;
		lt = lt.substring(0, lt.indexOf(".") + 7);
		var ln = "" + points[i].x;
		ln = ln.substring(0, ln.indexOf(".") + 7);

		txt = txt + "<coordinates>" + ln +", "+ lt + "</coordinates>\n";

		cr = cr + ln +", "+ lt + "\n";

		txt = txt + "</Point>\n<Style>\n<IconStyle>\n<Icon>\n";
		txt = txt + "<href>http://maps.google.com/mapfiles/kml/paddle/red-circle.png</href>\n";
		txt = txt + "</Icon>\n</IconStyle>\n</Style>\n</Placemark>\n";

    	}
	
	cr = cr + "</coordinates>\n</LineString>\n</Placemark>\n"


	txt = txt +"</Document>\n</kml>\n";

	document.getElementById("ptdesc").value = st + cr + txt;
	document.getElementById("ptdesc").focus();

    }

   //]]>

