/**
* @desc funkcja oblicza odleglosci na mapie
* @param none 
* @return none
* @author Dariusz Pidzik <dariusz.pidzik@polconstruct.com>
*/

// Global variables
var mapdiv = document.getElementById("map2");
var poly;
var count = 0;
var points = new Array();
var markers = new Array();
var icon_url ="http://labs.google.com/ridefinder/images/";
var tooltip;
var lineColor = "#0000af";
var fillColor = "#335599";
var lineWeight = 3;
var lineOpacity = .8;
var fillOpacity = .2;
var report= document.getElementById("status");
var unit = 'km';


function addIcon(icon) { // Add icon attributes

 icon.shadow= icon_url + "mm_20_shadow.png";
 icon.iconSize = new GSize(12, 20);
 icon.shadowSize = new GSize(22, 20);
 icon.iconAnchor = new GPoint(6, 20);
 icon.infoWindowAnchor = new GPoint(5, 1);
}


function showTooltip(marker) { // Display tooltips

 tooltip.innerHTML = marker.tooltip;
 tooltip.style.display = "block";

 // Tooltip transparency specially for IE
 if(typeof(tooltip.style.filter) == "string") {
 tooltip.style.filter = "alpha(opacity:70)";
 }

 var currtype = map2.getCurrentMapType().getProjection();
 var point= currtype.fromLatLngToPixel(map2.fromDivPixelToLatLng(new GPoint(0,0),true),map2.getZoom());
 var offset= currtype.fromLatLngToPixel(marker.getLatLng(),map2.getZoom());
 var anchor = marker.getIcon().iconAnchor;
 var width = marker.getIcon().iconSize.width + 6;
// var height = tooltip.clientHeight +18;
 var height = 10;
 var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y - height)); 
 pos.apply(tooltip);
}

function leftClick(overlay, point) {

 if(point) {
  count++;

 if(count%2 != 0) {

  // Light blue marker icons
  var icon = new GIcon();
  //icon.image = "lightblue.png";
  icon.image = icon_url +"mm_20_purple.png";
  addIcon(icon);
 }
  else {
  // Purple marker icons
  var icon = new GIcon();
  icon.image = icon_url +"mm_20_purple.png";
  addIcon(icon);
 }

  // Make markers draggable
  var marker = new GMarker(point, {icon:icon, draggable:true, bouncy:false, dragCrossMove:true});
  map2.addOverlay(marker);
  marker.content = count;
  markers.push(marker);
  marker.tooltip = "Point "+ count;

  GEvent.addListener(marker, "mouseover", function() {
   showTooltip(marker);
  });

  GEvent.addListener(marker, "mouseout", function() {
   tooltip.style.display = "none";
 });

  // Drag listener
  GEvent.addListener(marker, "drag", function() {
   tooltip.style.display= "none";
   drawOverlay();
  });

  // Second click listener
  GEvent.addListener(marker, "click", function() {
   tooltip.style.display = "none";

  // Find out which marker to remove
  for(var n = 0; n < markers.length; n++) {
   if(markers[n] == marker) {
    map2.removeOverlay(markers[n]);
    break;
   }
  }

  // Shorten array of markers and adjust counter
  markers.splice(n, 1);
  if(markers.length == 0) {
    count = 0;
  }
   else {
    count = markers[markers.length-1].content;
    drawOverlay();
  }
  });
 drawOverlay();
 }
}


function toggleMode() {

 if(markers.length > 1) drawOverlay();
}


function drawOverlay(){

 // Check radio button
 //var lineMode = document.forms["f"].elements["mode"][0].checked;
   var lineMode = true;
	
 if(poly) { map2.removeOverlay(poly); }
 points.length = 0;

 for(i = 0; i < markers.length; i++) {
  points.push(markers[i].getLatLng());
 }
 if(lineMode) {
   // Polyline mode
   poly = new GPolyline(points, lineColor, lineWeight, lineOpacity);
   var length = poly.getLength()/1000;
   var unit = " km";
   //report.innerHTML = "Total line length:<br/> " + length.toFixed(3) + unit;
   document.getElementById('status').style.marginLeft = 540 + 'px';
   document.getElementById('status').innerHTML = "Total line length:<br/><b>" + length.toFixed(3) + unit +"</b>";
   try{
   		markers[markers.length-1].tooltip = "Point "+ count + "<br/>" + length.toFixed(3) + unit;
   }catch(err){}
  }
  else {
   // Polygon mode
   points.push(markers[0].getLatLng());
   poly = new GPolygon(points, lineColor, lineWeight, lineOpacity, fillColor, fillOpacity);
   var area = poly.getArea()/(1000*1000);
   var unit = " km&sup2;";
   report.innerHTML = "Area of polygon:<br/> " + area.toFixed(3) + unit;
  }
  map2.addOverlay(poly);
}


function clearMap() {

 // Clear current map and reset arrays
 map2.clearOverlays();
 points.length = 0;
 markers.length = 0;
 count = 0;
 report.innerHTML = "&nbsp;";
}