function load(themap, lat, long, zoom) {
  if (GBrowserIsCompatible()) {
    var zoom = 13;
    var map = new GMap2(document.getElementById(themap));
    map.setCenter(new GLatLng(lat, long), zoom);
    
    // set controls and center
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(lat,long), zoom);

    var point = new GLatLng(lat,long);
    var themarker = new GMarker(point);
    map.addOverlay(themarker);
  }
}

function hideEl(el){ if (document.getElementById(el)) document.getElementById(el).style.display = "none"; }
function showEl(el){ if (document.getElementById(el)) document.getElementById(el).style.display = "block"; }


function zoom2acc(zoomlevel) {
  if(zoomlevel<=0) return 0;
  if(zoomlevel<=2) return 1;
  if(zoomlevel<=4) return 2;
  if(zoomlevel<=6) return 3;
  if(zoomlevel<=8) return 4;
  if(zoomlevel<=10) return 5;
  if(zoomlevel<=12) return 6;
  if(zoomlevel<=14) return 7;
  return 8;
}

function acc2zoom(accuracy) {
  if(accuracy<=0) return 0;
  if(accuracy==1) return 1;
  if(accuracy==2) return 6;
  if(accuracy==3) return 7;
  if(accuracy==4) return 8;
  if(accuracy==5) return 9;
  if(accuracy==6) return 10;
  if(accuracy==7) return 11;
  return 13;
}

function set_object_map() {
  document.getElementById('location_accuracy').value  = document.getElementById('gmap_cont_accuracy').value;  
  document.getElementById('location_lat').value  			= document.getElementById('gmap_cont_latitude').value;  
  document.getElementById('location_long').value 			= document.getElementById('gmap_cont_longitude').value;
}

function get_object_map() {
  document.getElementById('gmap_cont_accuracy').value  = document.getElementById('location_accuracy').value;
  document.getElementById('gmap_cont_latitude').value  = document.getElementById('location_lat').value;
  document.getElementById('gmap_cont_longitude').value = document.getElementById('location_long').value;
}

function showMap(me) {
  var box = getDimensions(me);

	var left = 0; 
	var top = box.y + -40;  

  if (document.getElementById){
    var c = document.getElementById('gmap_cont');
    var d = document.getElementById('gmap');
    c.style.left = left+'px';
    c.style.top = top+'px';
    left=left+24;
    top=top+24;
    d.style.left = left+'px';
    d.style.top = top+'px';
    showEl('gmap_cont');
    showEl('gmap');
  }
}

function showMapEdit(me) {
	get_object_map();
  
  var box = getDimensions(me);

	var left = 0; 
	var top = box.y + -40;  
  if (document.getElementById){
    var c = document.getElementById('gmap_cont_edit');
    var d = document.getElementById('gmap');
    c.style.left = left+'px';
    c.style.top = top+'px';
    left=left+24;
    top=top+24;
    d.style.left = left+'px';
    d.style.top = top+'px';
    showEl('gmap_cont_edit');
    showEl('gmap');
	  //alert('left = ' + left + ' top : ' + top + 'xoff=0');
  }
	var loc_acc = document.getElementById('gmap_cont_accuracy').value 
	var loc_lat = document.getElementById('gmap_cont_latitude').value 
	var loc_long = document.getElementById('gmap_cont_longitude').value                     	
  loadMap('gmap', loc_lat, loc_long, '', loc_acc, true);

}

function createMarker3(map, point, marker, setmarker) {
  if(setmarker) {
    var marker = new GMarker(point, {draggable: true});
  } else {
    var marker = new GMarker(point);
  }
  return marker;
}

function loadMap(mid, lat, long, infoTabArray, accuracy, setmarker) {
	//alert('loadMap= mid=' + mid + ' lat: ' + lat + 'long:' + long + ' tabs=' + infoTabArray + ' acc:' + accuracy + ' marker:' + setmarker);

  if (GBrowserIsCompatible()) {

    var map = new GMap2(document.getElementById(mid));
    map.enableContinuousZoom();
        
    var zoomlevel=0;
    zoomlevel = acc2zoom(accuracy);
      
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(lat,long), zoomlevel);
  }
  var point = new GLatLng(lat,long);
  var icon_short = null;

  var themarker = createMarker3(map, point, icon_short, setmarker);
  var markers = [];
  markers.push(themarker);

  var mgrOptions = {maxZoom: 5};
  //var mgr = new GMarkerManager(map, mgrOptions);

  GEvent.addListener(map, "zoomend", function (prevlevel, newlevel) {
      if(newlevel>13) map.setZoom(prevlevel);
     });

  if(setmarker) {
    GEvent.addListener(themarker, "dragstart", function() {
      //map.closeInfoWindow();
    });
    
    GEvent.addListener(themarker, "dragend", function() {
      mpoint = themarker.getPoint();
      document.getElementById('gmap_cont_latitude').value = mpoint.y;
      document.getElementById('gmap_cont_longitude').value = mpoint.x;
      map.zoomIn();
      map.zoomIn();
      map.panTo(mpoint);
      var zoomlevel = map.getZoom();      
      document.getElementById('gmap_cont_accuracy').value = zoom2acc(zoomlevel);
    });

    GEvent.addListener(map, "click", function(marker, point) {
      if (marker) {
        marker.setPoint(point);
      } else {
        themarker.setPoint(point);
        map.panTo(point);
        var zoomlevel = map.getZoom();
        document.getElementById('gmap_cont_accuracy').value = zoom2acc(zoomlevel);
        document.getElementById('gmap_cont_latitude').value = point.y;
        document.getElementById('gmap_cont_longitude').value = point.x;
      }
    });

  }
  map.addOverlay(themarker);
  return map;
}
