// GoogleMaps 1.9
// 29.12.2010
// Modul-Update for CSP2010 by Aschti
// Thanks @ the CSP-Team for Support

var gdir;

function cs_googlemaps_createusersmapmarker(point,tabs,image,id,nick,url) {
	var icon = new GIcon();
	icon.image = image[0];
	icon.iconSize = new GSize(image[1], image[2]);
	subt = image[2] / 100 * 11;
	subt = Math.ceil(subt);
	var anchor = image[2] - subt;
	icon.iconAnchor= new GPoint(10, anchor);
	var infoanchor = image[2] / 3;
	icon.infoWindowAnchor = new GPoint(infoanchor, 2);
	side_bar_html += '<img src=' + url + '> <a href=\"javascript:cs_googlemaps_click(' + id + ')\">' + nick + '</a><br>';
	var marker = new GMarker(point, icon);
    return marker;
}

function cs_googlemaps_createtabmarker(point, tabs, image, id){
	var icon = new GIcon();
	icon.image = image[0];
	icon.iconSize = new GSize(image[1], image[2]);
	subt = image[2] / 100 * 11;
	subt = Math.ceil(subt);
	var anchor = image[2] - subt;
	icon.iconAnchor= new GPoint(10, anchor);
	var infoanchor = image[2] / 3;
	icon.infoWindowAnchor = new GPoint(infoanchor, 2);
	var marker = new GMarker(point, icon);
    return marker;
}
function cs_googlemaps_gdir() {
			if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("cs_googlemaps"));
			gdir = new GDirections(map, document.getElementById("directions"));
			GEvent.addListener(gdir, "load", cs_googlemaps_OnGDirectionsLoad);
//			GEvent.addListener(gdir, "error", cs_googlemaps_handleerrors);
			cs_googlemaps_setdirections("Mannheim", "Berlin", "de");
		}
}
function cs_googlemaps_geo(lat, lng, zoom) {
		if (GBrowserIsCompatible()) 
		{
		map = new GMap2(document.getElementById("cs_googlemaps"), {mapTypes:[G_SATELLITE_MAP, G_HYBRID_MAP, G_NORMAL_MAP]});
		map.setCenter(new GLatLng(lat, lng), zoom);
		GEvent.addListener(map, "click", function(overlay, point)
			{ 
				map.clearOverlays(); 
				if (point) { 
				map.addOverlay(new GMarker(point)); 
				map.panTo(point);
				document.getElementById("lat").value = point.lat();  
				document.getElementById("lng").value = point.lng();  
				}
			}
		); 
		}
	else 
		{
		alert("Browser Error - Googlemap API Key !");
		}    
}
function cs_googlemaps_setdirections(fromAddress, toAddress, locale) {
      gdir.load("from: " + fromAddress + " to: " + toAddress,
               { "locale": locale });
}
function cs_googlemaps_OnGDirectionsLoad(){
	}
function cs_googlemaps_geocodeaddress(address,tabs,marker,zoom,id) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (point) {
	  var lat = point.lat();
	  var lng = point.lng();
	marker = cs_googlemaps_createtabmarker(point,tabs,marker,id);
	map.addOverlay(marker);
	GEvent.addListener(marker, "click", function() {
	marker.openInfoWindowTabsHtml(tabs);
	});
		}
    }
  );
}
function cs_googlemaps_geocodeaddressusersmap(address,tabs,marker,zoom,id,nick,url) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (point) {
	  var lat = point.lat();
	  var lng = point.lng();
	marker = cs_googlemaps_createusersmapmarker(point,tabs,marker,id,nick,url);
	map.addOverlay(marker);
	document.getElementById("cs_googleusersmap").innerHTML = side_bar_html;
	GEvent.addListener(marker, "click", function() {marker.openInfoWindowTabsHtml(tabs);});
	gmarkers[id] = marker;
	}
    }
  );
}
function cs_googlemaps_geocodeaddress_user(address,tabs,marker,zoom,id) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (point) {
	  var lat = point.lat();
	  var lng = point.lng();
	marker = cs_googlemaps_createtabmarker(point,tabs,marker,id);
	map.addOverlay(marker);
	
	//Allway Open Window
	GEvent.addListener(marker, marker.openInfoWindowTabsHtml(tabs));
	
	//Open by Close Window
	GEvent.addListener(marker, "click", function() {marker.openInfoWindowTabsHtml(tabs);});

	}
    }
  );
}
function createTabMarker(point, tabs,image)
{
	var icon = new GIcon();
	icon.image = image[0];
	icon.iconSize = new GSize(image[1], image[2]);
	subt = image[2] / 100 * 11;
	subt = Math.ceil(subt);
	var anchor = image[2] - subt;
	icon.iconAnchor= new GPoint(10, anchor);
	var infoanchor = image[2] / 3;
	icon.infoWindowAnchor = new GPoint(infoanchor, 2);
	var marker = new GMarker(point,icon);
	GEvent.addListener(marker, "click", function() {
	  marker.openInfoWindowTabsHtml(tabs);
	});
	return marker;
}
function createTabMarkerex(point,tabs,image,id,nick,url)
{
	var icon = new GIcon();
	icon.image = image[0];
	icon.iconSize = new GSize(image[1], image[2]);
	subt = image[2] / 100 * 11;
	subt = Math.ceil(subt);
	var anchor = image[2] - subt;
	icon.iconAnchor= new GPoint(10, anchor);
	var infoanchor = image[2] / 3;
	icon.infoWindowAnchor = new GPoint(infoanchor, 2);
	side_bar_html += '<img src=' + url + '> <a href="javascript:cs_googlemaps_click(' + id + ')">' + nick + '</a><br>';
	var marker = new GMarker(point,icon);
	gmarkers[id] = marker;
	GEvent.addListener(marker, "click", function() {
	marker.openInfoWindowTabsHtml(tabs);
	});
	return marker;
}
function cs_googlemaps_tilechk(){
		paragraphs = map.getContainer().getElementsByTagName('p').length;
		if(paragraphs>4)
		{
		map.zoomOut(false,true);
		}
}
function cs_googlemaps_wheelevent(e){
        if (!e) e = window.event;
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
}
function cs_googlemaps_click(i) {
        GEvent.trigger(gmarkers[i], "click");
}
function bearing( from, to ) {
      var arrowIcon = new GIcon();
      arrowIcon.iconSize = new GSize(24,24);
      arrowIcon.shadowSize = new GSize(1,1);
      arrowIcon.iconAnchor = new GPoint(12,12);
      arrowIcon.infoWindowAnchor = new GPoint(0,0);
      var degreesPerRadian = 180.0 / Math.PI;
        
      var lat1 = from.latRadians();
      var lon1 = from.lngRadians();
      var lat2 = to.latRadians();
      var lon2 = to.lngRadians();

      var angle = - Math.atan2( Math.sin( lon1 - lon2 ) * Math.cos( lat2 ), Math.cos( lat1 ) * Math.sin( lat2 ) - Math.sin( lat1 ) * Math.cos( lat2 ) * Math.cos( lon1 - lon2 ) );
      if ( angle < 0.0 )
      angle  += Math.PI * 2.0;

      angle = angle * degreesPerRadian;
      angle = angle.toFixed(1);

      return angle;
      }

function arrowHead(points) {
        var p1=points[points.length-1];
        var p2=points[points.length-2];
        var dir = bearing(p2,p1);
        var dir = Math.round(dir/3) * 3;
        while (dir >= 120) {dir -= 120;}
        arrowIcon.image = "symbols/googlemaps/arrow/dir_"+dir+".png";
        map.addOverlay(new GMarker(p1, arrowIcon));
      }

function midArrows(points) {
          for (var i=1; i < points.length-1; i++) {
          var p1=points[i-1];
          var p2=points[i+1];
          var dir = bearing(p1,p2);

          var dir = Math.round(dir/3) * 3;
          while (dir >= 120) {dir -= 120;}
          arrowIcon.image = "symbols/googlemaps/arrow/dir_"+dir+".png";
          map.addOverlay(new GMarker(points[i], arrowIcon));
        }
      }
      
//window.onunload = GUnload;
