var GBIC = GBrowserIsCompatible();

var map = null;

function getCoord(lat,lng)
{
  var merker=null;
  var zoom = ((lat == 0) && (lng == 0))?2:10;

  if(GBIC)
  {
     map = new GMap2(document.getElementById("map_canvas"), {draggableCursor:"crosshair"});
     map.setCenter(new GLatLng(lat,lng),zoom);
     var ovSize=new GSize(200, 150);
     var ovMap=new GOverviewMapControl();
     map.addControl(ovMap);
     var mini=ovMap.getOverviewMap();

     GEvent.addListener(map,"click", function(overlay,point) {
       if(merker != null)
       { map.removeOverlay(merker); }

       merker= new GMarker(point,{draggable: true});
       map.addOverlay(merker);
       var myLatLng = merker.getLatLng();
       map.setCenter(myLatLng);

	   $("latitude").value = myLatLng.lat();
       $("longitude").value = myLatLng.lng();
       $("speichern").style.display="inline";

       GEvent.addListener(merker, "dragend", function() {
         var myLL = merker.getLatLng();
         $("latitude").value = myLL.lat();
         $("longitude").value = myLL.lng();
       });
     });

     map.addControl(new GMapTypeControl());
     map.addControl(new GScaleControl());
     if(iMSIE)
     {
       //window.setTimeout("map.addControl(new GSmallMapControl())", 500);
       map.addControl(new GSmallMapControl());
       window.setTimeout("map.setZoom(map.getZoom())", 500);
     }
     else
       map.addControl(new GLargeMapControl());
  }
}

function getMap(obj,lat,lng,zoom)
{
  var map = null;
  if(GBIC)
  {
     map = new GMap2(obj);
     map.setCenter(new GLatLng(lat,lng),zoom);

     map.addControl(new GMapTypeControl());
     map.addControl(new GScaleControl());
     if(iMSIE)
     {
       map.addControl(new GSmallMapControl());
       window.setTimeout("map.setZoom(map.getZoom())", 500);
     }
     else
       map.addControl(new GLargeMapControl());
  }
  return map;
}

function setCoord(mlat,mlng)
{
  var merker=null;

  if(GBIC)
  {
     map = new GMap2($("map_canvas"), {draggableCursor:"crosshair"});
     var pointa = new GLatLng(mlat,mlng);
     map.setCenter(pointa, 10);
     var ovSize=new GSize(200, 150);
     var ovMap=new GOverviewMapControl();
     map.addControl(ovMap);
     var mini=ovMap.getOverviewMap();

     merker= new GMarker(pointa,{draggable: true});
     map.addOverlay(merker);

     GEvent.addListener(merker, "dragend", function() {
         var myLL = merker.getLatLng();
         $("latitude").value = myLL.lat();
         $("longitude").value = myLL.lng();
         map.setCenter(myLL);
       });

    var dMapDiv = $("map_canvas");
    var CopyrightDiv = dMapDiv.firstChild.nextSibling;
		var CopyrightImg = dMapDiv.firstChild.nextSibling.nextSibling;
		CopyrightDiv.style.display = "none";
		CopyrightImg.style.display = "none";

    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    if(iMSIE)
    {
      map.addControl(new GSmallMapControl());
      window.setTimeout("map.setZoom(map.getZoom())", 500);
    }
    else
       map.addControl(new GLargeMapControl());
  }
}

function setLocation(obj,mlat,mlng,zoom,gmtc)
{
  if(GBIC)
  {
    var map = new GMap2(obj);
    var pointa = new GLatLng(mlat,mlng);
    map.setCenter(pointa,zoom);

    var merker= new GMarker(pointa);
    map.addOverlay(merker);

    map.addControl(new GSmallMapControl());
    if(gmtc)
     map.addControl(new GMapTypeControl());

    var CopyrightDiv = obj.firstChild.nextSibling;
		var CopyrightImg = obj.firstChild.nextSibling.nextSibling;
		CopyrightDiv.style.display = "none";
  	CopyrightImg.style.display = "none";
  }
}

function setLocationIndex(obj,mlat,mlng,zoom,label,link)
{
  if(GBIC)
  {
    var map = new GMap2(obj);
    var pointa = new GLatLng(mlat,mlng);
    var CopyrightDiv = null;
		var CopyrightImg = null;
		var merker = null;
		var myIcon = null;

    map.setCenter(pointa,zoom);
    map.setMapType(G_SATELLITE_MAP);

    myIcon = new GIcon();
    myIcon.image = site_url+"mapfiles/markerkl_ani.gif";
    myIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    myIcon.iconSize = new GSize(12, 20);
    myIcon.shadowSize = new GSize(22, 20);
    myIcon.iconAnchor = new GPoint(6, 20);

    if(link!=null && link.length > 0)
    {
      merker = new GMarker(pointa,{icon:myIcon,title:label,clickable:true});
      GEvent.addListener(merker, "click",  new Function("", "document.location.href='"+link+"';"));
    }
    else
      merker = new GMarker(pointa,{icon:myIcon,title:label,clickable:false});

    map.addOverlay(merker);

    CopyrightDiv = obj.firstChild.nextSibling;
		CopyrightImg = obj.firstChild.nextSibling.nextSibling;
		CopyrightDiv.style.display = "none";
  	CopyrightImg.style.display = "none";
  }
}

function setLocVL(obj,mlat,mlng,label,link,sat)
{
  if(GBIC)
  {
    var locmap = new GMap2(obj);
    var pointa = new GLatLng(mlat,mlng);
    var locmarker = null;
    var myIcon = null;
    var CopyrightDiv = null;

    locmap.setCenter(pointa,(iMSIE?13:14));
    locmap.addControl(new GMapTypeControl());
    locmap.addControl(new GScaleControl());

    if(link!=null && link.length > 0)
    {
     locmarker = createVlmarkerklein("ani",pointa,label,true);
     GEvent.addListener(locmarker, "click", new Function("", "document.location.href='"+link+"';"));
    }
    else
     locmarker = createVlmarkerklein("ani",pointa,label,false);

    locmap.addOverlay(locmarker);

    CopyrightDiv = obj.firstChild.nextSibling;
		CopyrightDiv.style.display = "none";
    if(iMSIE)
    {
      locmap.addControl(new GSmallMapControl());
    }
    else
      locmap.addControl(new GLargeMapControl());

    if(sat)
      locmap.setMapType(G_SATELLITE_MAP);
  }
}



function createpoint(mlat,mlng){ return GBIC ? new GLatLng(mlat,mlng) : null; }

function setTrack(obj,locmarker,runde,clat,clng,zoom)
{
  if(GBIC)
  {
    var map = new GMap2(obj);
    var pline = new Array();

    map.setCenter(new GLatLng(clat,clng),zoom);

    if(locmarker.length > 0)
    {
      pline.push(locmarker[0].getLatLng());

      var CopyrightDiv = obj.firstChild.nextSibling;
		  var CopyrightImg = obj.firstChild.nextSibling.nextSibling;
  		CopyrightDiv.style.display = "none";
	  	CopyrightImg.style.display = "none";

      for(var i=1;i < locmarker.length;i++)
      {
        pline.push(locmarker[i].getLatLng());
      }

      map.addOverlay(new GPolyline(pline,"#ff0000", 3, .8));
      if(runde)
        map.addOverlay(new GPolyline(new Array(locmarker[locmarker.length-1].getLatLng(),locmarker[0].getLatLng()),"#ff0000", 3, .8));
    }
  }
}

function setTrackLine(obj,tline,runde,clat,clng,zoom)
{
  var map = null;

  if(GBIC)
  {
    map = new GMap2(obj);
    if(iMSIE)
    {
      zoom--;
      clng+=0.05;
    }

    map.setCenter(new GLatLng(clat,clng),zoom);

    if(tline.length > 1)
    {
     var CopyrightDiv = obj.firstChild.nextSibling;
		 var CopyrightImg = obj.firstChild.nextSibling.nextSibling;
  	 CopyrightDiv.style.display = "none";
	   CopyrightImg.style.display = "none";

     map.addOverlay(new GPolyline(tline,"#ff0000", 3, .8));
      if(runde)
        map.addOverlay(new GPolyline(new Array(tline[tline.length-1],tline[0]),"#ff0000", 3, .8));
    }
  }
  return map;
}

function setVLTrack(obj,tline,runde,clat,clng,zoom,lid,aid,locd)
{
  var map = null;
  var marker = null;
  var CopyrightDiv = null;

  if(GBIC)
  {
    map = new GMap2(obj);
    if(iMSIE)
    {
      zoom--;
      clng+=0.05;
    }

    map.setCenter(new GLatLng(clat,clng),zoom);

    if(tline.length > 1)
    {
//     if(!iMSIE)
//     {
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());
      map.addControl(new GScaleControl());
//     }

     CopyrightDiv = obj.firstChild.nextSibling;
  	 CopyrightDiv.style.display = "none";

     map.addOverlay(new GPolyline(tline,"#ff0000", 3, .8));
      if(runde)
        map.addOverlay(new GPolyline(new Array(tline[tline.length-1],tline[0]),"#ff0000", 3, .8));

     if(aid.length > 1)
     {
       for(var i = 0;i < aid.length;i++)
       {
         if(lid == aid[i])
           marker = createVlmarkerklein("ani",tline[i],locd[i][0],false);
         else
         {
           if(locd[i][1])
           {
             marker = createVlmarkerklein("red",tline[i],locd[i][0],true);
             GEvent.addListener(marker, "click", new Function("", "document.location.href='"+locd[i][1]+"';"));
           }
           else
             marker = createVlmarkerklein("red",tline[i],locd[i][0],false);
         }
         map.addOverlay(marker);
       }
     }
    }
  }
  return map;
}

function createVlmarkerklein(idx,point,label,mclick)
{
  // "tiny" marker icon
  var myIcon = new GIcon();
  myIcon.image = site_url+"mapfiles/markerkl_"+idx+".gif";
  myIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
  myIcon.iconSize = new GSize(12, 20);
  myIcon.shadowSize = new GSize(22, 20);
  myIcon.iconAnchor = new GPoint(6, 20);
//  myIcon.infoWindowAnchor = new GPoint(5, 1);

  return new GMarker(point,{icon:myIcon, title:label, clickable:mclick});
}

function mdatenobj(lat,lng,ltitle,idx,info,bilder,video)
{
  this.lat = lat;
  this.lng = lng;
  this.ltitle=ltitle;
  this.idx = idx;
  this.info = info;
  this.bilder = bilder;
  this.video = video;
}

function createMap(lat,lng,zoom,contr,bmsie)
{
  this.map = null;
  this.GBIsCompatible = GBrowserIsCompatible();
  this.point = null;
  this.sUrl = site_url;
  this.merker = new Array();
  this.minlng = lng;
  this.maxlng = lng;
  this.minlat = lat;
  this.maxlat = lat;

  if(this.GBIsCompatible)
  {
    this.map = new GMap2($("my_map"));
    this.point = new GLatLng(lat,lng);
    this.map.setCenter(this.point,zoom);
    var ovSize=new GSize(200, 150);
    this.ovMap=new GOverviewMapControl();
    this.map.addControl(this.ovMap);
    var mini=this.ovMap.getOverviewMap();
   if(!bmsie)
   {
    this.map.addControl((contr?new GLargeMapControl():new GSmallMapControl()));
    this.map.addControl(new GMapTypeControl());
    this.map.addControl(new GScaleControl());
   }
  }
}

createMap.prototype.setControl = function ()
{
  this.map.addControl(new GSmallMapControl());
  this.map.addControl(new GMapTypeControl());
  this.map.addControl(new GScaleControl());
  this.map.setZoom(this.map.getZoom());
}

createMap.prototype.setTrack = function (locmarker,runde)
{
  if(GBIC)
  {
    var pline = new Array();

    this.map.clearOverlays();

    if(locmarker.length > 0)
    {
      this.initminmax(locmarker[0].getLatLng());
      this.map.addOverlay(locmarker[0]);
      pline.push(locmarker[0].getLatLng());

      for(var i=1;i < locmarker.length;i++)
      {
        this.setminmax(locmarker[i].getLatLng());
        this.map.addOverlay(locmarker[i]);
        pline.push(locmarker[i].getLatLng());
      }
      this.setpos();
      this.map.addOverlay(new GPolyline(pline,"#ff0000", 3, .8));
      if(runde)
        this.map.addOverlay(new GPolyline(new Array(pline[pline.length-1],pline[0]),"#ff0000", 3, .8));
    }
  }
}

createMap.prototype.setTrackLine = function (runde)
{
  if(GBIC)
  {
    var pline = new Array();

    for(var i=0;i < this.merker.length;i++)
    {
      pline.push(this.merker[i].getLatLng());
    }

    this.map.addOverlay(new GPolyline(pline,"#ff0000", 3, .8));
    if(runde)
      this.map.addOverlay(new GPolyline(new Array(pline[pline.length-1],pline[0]),"#ff0000", 3, .8));
  }
}

createMap.prototype.createMarker = function (point, index, label)
{
// var myIcon = new GIcon(baseIcon);

 var myIcon = new GIcon();
     myIcon.image = this.sUrl + "mapfiles/marker" + index + ".gif";
     myIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
     myIcon.iconSize = new GSize(20, 34);
     myIcon.shadowSize = new GSize(37, 34);
     myIcon.iconAnchor = new GPoint(9, 34);
//     myIcon.infoWindowAnchor = new GPoint(9, 2);
//     myIcon.infoShadowAnchor = new GPoint(18, 25);
     myIcon.infoWindowAnchor = new GPoint(1, 1);
     myIcon.infoShadowAnchor = new GPoint(18, 25);

  return new GMarker(point,{icon:myIcon, title:label});
}

createMap.prototype.createTMarker = function (point, index, idx, label)
{
// var myIcon = new GIcon(baseIcon);
 var marker = null;

 var myIcon = new GIcon();
     myIcon.image = this.sUrl + "mapfiles/marker"+ index +"_" + idx + ".gif";
     myIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
     myIcon.iconSize = new GSize(20, 34);
     myIcon.shadowSize = new GSize(37, 34);
     myIcon.iconAnchor = new GPoint(9, 34);
     myIcon.infoWindowAnchor = new GPoint(9, 2);
     myIcon.infoShadowAnchor = new GPoint(18, 25);

  marker = new GMarker(point,{icon:myIcon, title:label});

  return marker;
}

createMap.prototype.createTempTMarker = function (point,title,idx1,idx2,info,bilder,video)
{
  var marker = this.createTMarker(point,idx1,idx2, title);

  var nbild=(bilder)?bilder.split("|"):null;
  var nvideo=(video)?video.split("|"):null;

	GEvent.addListener(marker, "click", function() {
	 if(info)
	 {
  		var tab3 = new GInfoWindowTab("Info", info);
    	var tab2 = (bilder)?new GInfoWindowTab(nbild[0], nbild[1]):null;
	    var tab1 = (video)?new GInfoWindowTab(nvideo[0], nvideo[1]):null;
	    if(!bilder && !video)
	     var infoTabs = [tab3];
      else if(bilder && !video)
	     var infoTabs = [tab2,tab3];
      else if(!bilder && video)
	     var infoTabs = [tab1,tab3];
	    else
	     var infoTabs = [tab1,tab2,tab3];
  		marker.openInfoWindowTabsHtml(infoTabs);
	 }
	});

  return marker;
}

createMap.prototype.setTMarker = function (locmarker,runde)
{
  var pline = new Array();

  this.map.clearOverlays();

  for(var i=0; i < locmarker.length;i++)
  {
    pline.push(locmarker[i].getLatLng());
    this.map.addOverlay(locmarker[i]);
  }

  this.map.addOverlay(new GPolyline(pline,"#ff0000", 3, .8));
  if(runde)
    this.map.addOverlay(new GPolyline(new Array(pline[pline.length-1],pline[0]),"#ff0000", 3, .8));
}



createMap.prototype.addAMarker = function (point,title,idx,info,bilder,video)
{
	var marker = this.createMarker(point, idx, title);

  var nbild=(bilder)?bilder.split("|"):null;
  var nvideo=(video)?video.split("|"):null;

	GEvent.addListener(marker, "click", function() {
		var tab3 = new GInfoWindowTab("Info", info);
		var tab2 = (bilder)?new GInfoWindowTab(nbild[0], nbild[1]):null;
		var tab1 = (video)?new GInfoWindowTab(nvideo[0], nvideo[1]):null;
		if(!bilder && !video)
		  var infoTabs = [tab3];
    else if(bilder && !video)
		  var infoTabs = [tab2,tab3];
    else if(!bilder && video)
		  var infoTabs = [tab1,tab3];
		else
		  var infoTabs = [tab1,tab2,tab3];
		marker.openInfoWindowTabsHtml(infoTabs);
	});

	this.map.addOverlay(marker);

	this.merker.push(marker);

//	this.setmerkerpos();

}

createMap.prototype.addTMarker = function (point,title,idx1,idx2,info,bilder,video)
{
	this.merker.push(this.createTMarker(point,idx1,idx2, title));
	var idx = this.merker.length-1;
  var nbild=bilder?bilder.split("|"):null;
  var nvideo=video?video.split("|"):null;
  var marker = this.merker[idx];

	GEvent.addListener(marker, "click", function() {
	 if(info)
	 {
		var tab3 = new GInfoWindowTab("Info", info);
		var tab2 = bilder?new GInfoWindowTab(nbild[0], nbild[1]):null;
		var tab1 = video?new GInfoWindowTab(nvideo[0], nvideo[1]):null;
		if(!bilder && !video)
		  var infoTabs = [tab3];
    else if(bilder && !video)
		  var infoTabs = [tab2,tab3];
    else if(!bilder && video)
		  var infoTabs = [tab1,tab3];
		else
		 var infoTabs = [tab1,tab2,tab3];

		marker.openInfoWindowTabsHtml(infoTabs);
	 }
	});

	this.map.addOverlay(this.merker[idx]);

//  return this.merker[idx];
}

createMap.prototype.addLMarker = function (point,title,idx,sUrl)
{
	var marker = this.createMarker(point, idx, title);

	GEvent.addListener(marker, "click", function() { document.location.href=sUrl; });
	if(idx == 0)
	  this.initminmax(point);
  else
	 this.setminmax(point);

 	this.setpos();
	this.map.addOverlay(marker);
	return marker;
}

createMap.prototype.setMarker = function (point)
{
  if(point == null)
    point = this.point;

	var marker = new GMarker(point);

	this.map.addOverlay(marker);

	return marker;
}

createMap.prototype.setmerkerpos = function ()
{
  if(this.merker.length > 0)
  {
   this.initminmax(this.merker[0].getLatLng());
   for(var i = 1;i < this.merker.length;i++)
   {
     this.setminmax(this.merker[i].getLatLng());
   }
   this.setpos();
  }
}

createMap.prototype.setpos = function ()
{
  var mbounds = null;
  var mpoint = new GLatLngBounds(new GLatLng(this.minlat,this.minlng),new GLatLng(this.maxlat,this.maxlng));

  this.map.setCenter(mpoint.getCenter(),14);

  mbounds = this.map.getBounds();

  while(!mbounds.containsBounds(mpoint))
   {
     this.map.setZoom(this.map.getZoom()-1);
     mbounds = this.map.getBounds();
   }
}

createMap.prototype.setminmax = function (point)
{
  var lat = point.lat();
  var lng = point.lng();

  if(this.minlng > lng) this.minlng = lng;
  if(this.maxlng < lng) this.maxlng = lng;
  if(this.minlat > lat) this.minlat = lat;
  if(this.maxlat < lat) this.maxlat = lat;
}

createMap.prototype.initminmax = function (point)
{
  var lat = point.lat();
  var lng = point.lng();

  this.minlng = lng;
  this.maxlng = lng;
  this.minlat = lat;
  this.maxlat = lat;
}


createMap.prototype.noCopy = function ()
{
 var dMapDiv = $("my_map");
    var CopyrightDiv = dMapDiv.firstChild.nextSibling;
//		var CopyrightImg = dMapDiv.firstChild.nextSibling.nextSibling;
		CopyrightDiv.style.display = "none";
//		CopyrightImg.style.display = "none";
}

createMap.prototype.setCenter = function (clat,clng,zoom)
{
  this.point = new GLatLng(clat,clng);
  this.map.setCenter(this.point,zoom);
}

createMap.prototype.removeOverlay = function (idx) { this.map.removeOverlay(merker); }
createMap.prototype.getMarker = function (idx) { return this.merker[idx]; }
createMap.prototype.setSatelliteMap = function () { this.map.setMapType(G_SATELLITE_MAP);}
createMap.prototype.removeOVMap = function () { this.map.removeControl(this.ovMap);}
createMap.prototype.setZoom = function (sz) { this.map.setZoom(sz); }
createMap.prototype.getZoom = function () { return this.map.getZoom(); }
createMap.prototype.getBounds = function () { return this.map.getBounds(); }


