var $d = document;
var $o = document.createElement("OPTION");
function $e($eid) {
	var $el = document.getElementById($eid);
	return $el;
}
function $st($string) { 
	return $string.replace(/(<([^>]+)>)/ig,"").replace(/^\s+|\s+$/g,""); 	
}

var tooltip = document.createElement("div");
	  
function initialize() {

	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("gmap_canvas"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
		tooltip.style.visibility="hidden";
		
		GEvent.addListener(map, "click", getAddress);
		GEvent.addListener(map, "load", gSetMarkers);

		geocoder = new GClientGeocoder();
		if(!$d.gmapselected.uselatlng) {
			if($d.mtype=="world" || $d.mtype=="") {
				map.setCenter(new GLatLng(34, 0), 1);
			} else {
				showAddress($d.gmapselected);
			}
		} else {
			if($d.gmapselected.zlevel==0)  $d.gmapselected.zlevel = $d.zlevel;
			map.setCenter(new GLatLng($d.gmapselected.lat, $d.gmapselected.lng), $d.gmapselected.zlevel);
			  if($d.gmarkers.length<=0) {
				var marker = new GMarker(new GLatLng($d.gmapselected.lat, $d.gmapselected.lng));
				map.addOverlay(marker);
				marker.openInfoWindowHtml($d.gmapselected.tooltip);
			  } else {
			  }
		}
	}
  
}

function showAddress(srcAddress) {
  if (geocoder) {	
	geocoder.getLatLng(
	  srcAddress.address,
	  function(point) {
		if (!point) {
		  alert(srcAddress.address + " not found");
		} else {
		  map.setCenter(point, $d.zlevel);
		  if($d.gmarkers.length<=0) {
		  	var marker = new GMarker(point);
		  	map.addOverlay(marker);
		  	marker.openInfoWindowHtml(srcAddress.tooltip);
		  } else {
		  }
		}
	  }
	);
	
  }
}

function getAddress(overlay, latlng) {
  if($d.adminmode=="edit") {
	  if (latlng != null) {
		address = latlng;
		geocoder.getLocations(latlng, showAddressLatLang);
	  }
  }
}

function showAddressLatLang(response) {
  map.clearOverlays();
  if (!response || response.Status.code != 200) {
	alert("Status Code:" + response.Status.code);
  } else {
    $d.markplace = response.Placemark[0];
	place = response.Placemark[0];
	point = new GLatLng(place.Point.coordinates[1],
						place.Point.coordinates[0]);
	marker = new GMarker(point);
	map.addOverlay(marker);
	
	$e("geoaddress").innerHTML = place.address;
	$e("geolat").innerHTML = place.Point.coordinates[1];
	$e("geolng").innerHTML = place.Point.coordinates[0];
	marker.openInfoWindowHtml($e("maptool").innerHTML);
	$d.lastmarker = marker;
  }
}

function gOnMarkerClick(srcMarker) {
	var $gurl = $d.js_lhref.replace("{_mtype_}",srcMarker.mtype).replace("{_mname_}",srcMarker.mname).replace(" ","-").toLowerCase();	
	window.open($gurl,"_self");
}

function showTooltip(marker) {
	tooltip.innerHTML = marker.tooltip;
	var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
	var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor=marker.getIcon().iconAnchor;
	var width=marker.getIcon().iconSize.width;
	var height=tooltip.clientHeight;
	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);
	tooltip.style.visibility="visible";
}

//--------------------------------------------------------------------------------------------------------//

function gInitPropertyMap() {
	if (GBrowserIsCompatible()) {
		if(loca_street1!="") {
			loca_address += loca_street1;
		}
		if(loca_street2!="") {
			if(loca_address!="") {
				loca_address += ", " + loca_street2;
			} else {
				loca_address += loca_street2;
			}
		}
		if(loca_city!="") {
			if(loca_address!="") {
				loca_address += ", " + loca_city;
			} else {
				loca_address += loca_city;
			}
			loca_address2 = loca_city;
		}
		if(loca_state!="" && loca_state!="NA") {
			if(loca_address!="") {
				loca_address += ", " + loca_state;
			} else {
				loca_address += loca_state;
			}
			loca_address2 += ", " + loca_state;
		}
		if(loca_country!="") {
			if(loca_address!="") {
				loca_address += ", " + loca_country;
			} else {
				loca_address += loca_country;
			}
			loca_address2 += ", " + loca_country;
		}	
		map = new GMap2(document.getElementById("gmap_canvas"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
			
		geocoder = new GClientGeocoder();
		if(loca_address!="") {	
			gShowMap(loca_address);
		} else {
			document.getElementById("gmap_canvas").style.height = "10px";
		}
	}  
}

$d.city_ok = false;
function gShowMap(srcAddress) {
  if (geocoder) {
	geocoder.getLatLng(
	  srcAddress,
	  function(point) {
		if (!point) {   		  
		  if(!$d.city_ok) {
			  gShowMap(loca_address2);
			  $d.city_ok = true;
		  } else {
			  document.getElementById("gmap_canvas").style.height = "10px";			
			  document.getElementById("gmap_canvas").innerHTML = "Map not available...";
		  }
		} else {
			panoramaOptions = { latlng:point };
			myPano = new GStreetviewPanorama(document.getElementById("gmap_street"), panoramaOptions);
			GEvent.addListener(myPano, "error", gStreetViewErrorHandler);						  
		  map.setCenter(point, 15);
	  	  var marker = new GMarker(point);
		  map.addOverlay(marker);
		}
	  }
	);
  }
}

function gViewStreetView(srcAddress) {
  if (geocoder) {
	geocoder.getLatLng(
	  srcAddress,
	  function(point) {
		if (!point) {
		  document.getElementById("gmap_street").style.height = "10px";	
		} else {
			alert("found");
			panoramaOptions = { latlng:point };
			myPano = new GStreetviewPanorama(document.getElementById("gmap_street"), panoramaOptions);
			GEvent.addListener(myPano, "error", gStreetViewErrorHandler);				
		}
	  }
	);
  }
}

function gStreetViewErrorHandler(errorCode) {
  if (errorCode != 0) {
  	document.getElementById("gmap_street").style.height = "10px";
	document.getElementById("gmap_street").innerHTML = "Street View not available...";
  }
}  	

//--------------------------------------------------------------------------------------------------------//

function gShowMap2(srcAddress) {
  if (geocoder) {
	geocoder.getLatLng(
	  srcAddress,
	  function(point) {
		if (!point) {   	
			alert("Map not available!");
		} else {
		  map.setCenter(point, $d.zlevel);
	  	  var marker = new GMarker(point);
		  map.addOverlay(marker);
		  gSetMarkers();
		}
	  }
	);
  }
}

function gShowMap3(geolat,geolng,zlevel) {
  if (geocoder) {
	point = new GLatLng(geolat,geolng);
	map.setCenter(point, zlevel);
	var marker = new GMarker(point);
	map.addOverlay(marker);
	gSetMarkers();
  }
}

function gInitWorldMap() {
	if (GBrowserIsCompatible()) {
		if(loca_city!="") {
			if(loca_address!="") {
				loca_address += ", " + loca_city;
			} else {
				loca_address += loca_city;
			}
		}
		if(loca_state!="" && loca_state!="NA") {
			if(loca_address!="") {
				loca_address += ", " + loca_state;
			} else {
				loca_address += loca_state;
			}
		}
		if(loca_country!="") {
			if(loca_address!="") {
				loca_address += ", " + loca_country;
			} else {
				loca_address += loca_country;
			}
		}	
		if(loca_type=="country") {
			$d.zlevel = 6;
		} else if(loca_type=="region") {
			$d.zlevel = 12;
		}
		map = new GMap2(document.getElementById("gmap_canvas"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
			
		geocoder = new GClientGeocoder();
		if(loca_address!="" || loca_uselatlng=='true') {	
			if($d.markers.length>0) {
				var srcMarker = $d.markers[1];
				if(srcMarker.uselatlng) {
					gShowMap3(srcMarker.geolat,srcMarker.geolng,loca_zlevel);
				}
			} else {
				if(loca_uselatlng=='true') {
					gShowMap3(loca_latitude,loca_longitude,loca_zlevel);
				} else {
					gShowMap2(loca_address);
				}
			}
		} else {
			map.setCenter(new GLatLng(34, 0), 1);
			gSetMarkers();
		}
	}  
}

function gInitCityMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("gmap_canvas"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
			
		geocoder = new GClientGeocoder();	
		gShowCityMap(loca_latitude,loca_longitude,loca_zlevel);		
	}
}

function gShowCityMap(geolat,geolng,zlevel) {
  if (geocoder) {
	point = new GLatLng(geolat,geolng);
	map.setCenter(point, zlevel);
	var marker = new GMarker(point);
	map.addOverlay(marker);
  }
}

function gMarkAddress(srcMarker) {
  if (geocoder) {
	if(srcMarker.uselatlng) {
		point = new GLatLng(srcMarker.geolat,srcMarker.geolng);
		var baseIcon = new GIcon();
		  baseIcon.iconSize=new GSize(32,32);
		  baseIcon.shadowSize=new GSize(56,32);
		  baseIcon.iconAnchor=new GPoint(16,32);
		  baseIcon.infoWindowAnchor=new GPoint(16,0);
		  
		var gicon = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon10.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon10s.png");
		
		var marker = new GMarker(point,gicon);

		GEvent.addListener(marker,"mouseover", function() {
		 marker.openInfoWindowHtml(srcMarker.info);
		});        
		GEvent.addListener(marker,"mouseout", function() {
		});  		  
		GEvent.addListener(marker,"click", function() {
		 //gOnMarkerClick(srcMarker);
		});  			
		map.addOverlay(marker);		
		return;
	}
	geocoder.getLatLng(
	  srcMarker.address,
	  function(point) {
		if (!point) {
		} else {
			/*
			if(srcMarker.geolat && srcMarker.geolng) {
				point = new GLatLng(srcMarker.geolat,srcMarker.geolng);
			} 
			*/
		    var baseIcon = new GIcon();
			  baseIcon.iconSize=new GSize(32,32);
			  baseIcon.shadowSize=new GSize(56,32);
			  baseIcon.iconAnchor=new GPoint(16,32);
			  baseIcon.infoWindowAnchor=new GPoint(16,0);
			  
		    var gicon = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon10.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon10s.png");
			
			var marker = new GMarker(point,gicon);

			GEvent.addListener(marker,"mouseover", function() {
			 //marker.openInfoWindowHtml(srcMarker.tooltip);
			});        
			GEvent.addListener(marker,"mouseout", function() {
			});  		  
			GEvent.addListener(marker,"click", function() {
			 //gOnMarkerClick(srcMarker);
			});  			
			map.addOverlay(marker);
		}
	  }
	);
  }
}

function gSetMarkers() {
	for(var i=1;i<=$d.markers.length;i++) {
		gMarkAddress($d.markers[i]);
	}
}
