var map;

var centerLatitue = 47.29081;
var centerLongitude = -122.19590;
var startZoom = 15;
var lat = 0;
var lng = 0;

var newMarkers = [];
var latLngs = [];
var icons = [];
function initialize() {
    var language=document.getElementById("language").value;
	if (! GBrowserIsCompatible()) {
		alert('Sorry. Your browser is not Google Maps compatible.');
	}
	map = new GMap2(document.getElementById("map_canvas"));
	gdir = new GDirections(map, document.getElementById("directions"));
	GEvent.addListener(gdir, "addoverlay", onGDirectionsAddOverlay);
	if(language=="zh_CN")
	{ 
	  GEvent.addListener(gdir, "error", zh_handleErrors);
	}  
    if(language=="en_US")
	{ 
	  GEvent.addListener(gdir, "error", en_handleErrors);
	} 
	if(language=="zh_TW")
	{ 
	  GEvent.addListener(gdir, "error", tw_handleErrors);
	} 
	if(language=="vi_VN")
	{ 
	  GEvent.addListener(gdir, "error", vi_handleErrors);
	} 
	if(language=="ko_KR")
	{ 
	  GEvent.addListener(gdir, "error", ko_handleErrors);
	} 
	map.setCenter(new GLatLng(centerLatitue, centerLongitude), startZoom);
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
    map.enableScrollWheelZoom();
	map.addControl(new GMapTypeControl());
	//map.setMapType(G_HYBRID_MAP);
}

function setDirections() {
    var span = document.getElementById("error");
    var language=document.getElementById("language").value;
    if(language=="zh_CN")
    {
    	language="zh-cn";
    }
    if(language=="zh_TW")
    {
    	language="zh-tw";
    }
	var now = new Date
	var rand = now.getTime();
	var searchUrl = "show_gmap.action?rand="+rand;
	if(span.innerHTML!="")
	{
		span.innerHTML="";
	}
	GDownloadUrl(searchUrl, function(data) {
		var myObject = eval('(' + data + ')');
		var fromAddress = document.getElementById("fromAddress").value;
	  	var toAddress = document.getElementById("toAddress").value;
		if (myObject.objects.length == 0) {
			map.setCenter(new GLatLng(centerLatitue, centerLongitude),startZoom);
			return;
		}
		var object ;
		for (var i = 0; i < myObject.objects.length; i++) {
			object = myObject.objects[i];
			var myname = object.name;
			if(fromAddress == myname){
				var fromAddress = new GLatLng(parseFloat(object.lat),parseFloat(object.lng));
				}
				if(toAddress == myname){
				var toAddress = new GLatLng(parseFloat(object.lat),parseFloat(object.lng));
				}
			}
			  	gdir.load("from: " + fromAddress + " to: " + toAddress,
  				{ "locale":language, "getSteps":true});
			});	
}

function createMarker() {
	var now = new Date
	var rand = now.getTime();
	var searchUrl = "show_gmap.action?rand="+rand;
	GDownloadUrl(searchUrl, function(data) {
		var myObject = eval('(' + data + ')');
		map.clearOverlays();
		var point = new GLatLng(parseFloat(47.2903788293859),parseFloat(-122.199296951294));
		var marker = new GMarker(point,{draggable:true});
	   	document.getElementById("lat1").value = centerLatitue;
		document.getElementById("lng1").value = centerLongitude;
	   map.addOverlay(marker);
	   GEvent.addListener(marker, 'dragend', function(latlng) {
		lat = latlng.lat();
		lng = latlng.lng();
		document.getElementById("lat1").value = lat;
		document.getElementById("lng1").value = lng;
		//alert("do you want to add marker here ?");
		return true;
	});
		if (myObject.objects.length == 0) {
			map.setCenter(new GLatLng(centerLatitue, centerLongitude),startZoom);
			return;
		}
		var object ;
		for (var i = 0; i < myObject.objects.length; i++) {
			object = myObject.objects[i];		
			var point = new GLatLng(parseFloat(myObject.objects[i].lat),parseFloat(myObject.objects[i].lng));
			var marker = showMarker(point,object);
			map.addOverlay(marker);
		}
	});

}

function showMarker(point,object) {
	   var icon = new GIcon();
	   var path = document.getElementById("path").value;
       icon.image = path+"/static/image/flag_maps.png";
	   icon.shadow = "http://maps.google.com/mapfiles/kml/shapes/flag_maps_shadow.png";
	   if(object.state == 1){
	   	icon.image = path+"/static/image/map_icon.png";
	   }
	   icon.iconSize = new GSize(40, 40);
       icon.shadowSize = new GSize(44, 40);
       icon.iconAnchor = new GPoint(6, 20);
       icon.infoWindowAnchor = new GPoint(5, 1);
	   var marker = new GMarker(point,icon);
	   
	   GEvent.addListener(marker, 'click', function() {
		var html =  '<table width="300" style="table-layout:fixed"><tr>'+
					'<td align="left" colspan="2">'+'<b><font color="black" size="+1">'+object.name +'</b>'+ '</td>' +
					'</tr><tr>'+
					'<td align="center" colspan="2">'+'<img width="200" height="100" src="'+path+'/gmap_image/'+ object.image + '" onError="imgErr(this)"/></td>'+
					'</tr><tr>'+ 
					'<td align="right" width="auto"><b><font color="black">Address:</font></b>'+'</td>'+'<td align="left" width="77%">' +'<font color="black">'+ object.address +'</font>'+'</td>' + 
					'</tr><tr>'+
					'<td align="right" width="auto"><b><font color="black">Description:</font></b>'+'</td>'+'<td align="left" width="77%" style="word-wrap :  break-word; overflow:hidden; ">'+ '<font color="black">'+object.description +'</font>'+ '</td>' + 
					'</tr><tr>'+
					'<td align="right" width="auto"><b><font color="black">Tel:</font></b>'+'</td>'+'<td align="left" width="77%">'+ '<font color="black">'+object.tel +'</font>'+ '</td>'
					'</tr></table>';
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function find() { 
	var now = new Date
	var rand = now.getTime();
	var searchUrl = "show_gmap.action?rand="+rand;
	GDownloadUrl(searchUrl, function(data) {
		var myObject = eval('(' + data + ')');
		map.clearOverlays();

		if (myObject.objects.length == 0) {
			map.setCenter(new GLatLng(centerLatitue, centerLongitude),startZoom);
			return;
		}
		var object ;
		for (var i = 0; i < myObject.objects.length; i++) {
			object = myObject.objects[i];		
			var point = new GLatLng(parseFloat(myObject.objects[i].lat),parseFloat(myObject.objects[i].lng));
			var marker = showMarker(point,object);
			map.addOverlay(marker);
		}
	});
}

function catchmymarker() {
	var mylat = document.getElementById("lat").value;
	var mylng = document.getElementById("lng").value;
	var myname = document.getElementById("name").value;
	var mypoint =new GLatLng(parseFloat(mylat),parseFloat(mylng));
	var now = new Date
	var rand = now.getTime();
	var searchUrl = "show_gmap.action?rand="+rand;
	GDownloadUrl(searchUrl, function(data) {
		var myObject = eval('(' + data + ')');
		map.clearOverlays();

		if (myObject.objects.length == 0) {

			map.setCenter(new GLatLng(centerLatitue, centerLongitude),startZoom);
			return;
		}
		var object ;
		for (var i = 0; i < myObject.objects.length; i++) {
			object = myObject.objects[i];		
			var point = new GLatLng(parseFloat(myObject.objects[i].lat),parseFloat(myObject.objects[i].lng));
			//if(parseFloat(mylat)==parseFloat(myObject.objects[i].lat)&&parseFloat(mylng)==parseFloat(myObject.objects[i].lng)){
			if(myname == object.name){
				var marker = new GMarker(mypoint,{draggable:true});
				map.addOverlay(marker);
				map.setCenter(point,startZoom);
				GEvent.addListener(marker, 'dragend', function(latlng) {
				lat = latlng.lat();
				lng = latlng.lng();
				document.getElementById("lat2").value = lat;
				document.getElementById("lng2").value = lng;				
				//alert("Do you want to add marker here ?");
				return true;
				});
			}
			else{
				var marker = showMarker(point,object);
				map.addOverlay(marker);
			}			
		}
	});
}

function zh_handleErrors(){
  var span = document.getElementById("error");
	//myform.error.parentNode.appendChild(span); 
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
    	span.innerHTML = "<font color='red'>没有相应的地理位置，能够找到一个指定的地址。 <br>这可能是由于这样一个事实，即地址是相对较新的，也可能是不正确的！</font>";
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
 		span.innerHTML = "<font color='red'>无法成功处理地址解析或行车路线请求，<br> 但是确切的失败原因未知!</font>";	
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>HTTP q 参数缺失或没有值。对于地址解析请求，这意味着将空地址指定为输入.<br> 对于行车路线请求，这意味着在输入中未指定查询。</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    //alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>您输入的地址无效或者找不到与你给定的地址相匹配的地区！</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    //alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>地址不能为空!</font>";
  else if (gdir.getStatus().code == G_GEO_SUCCESS)
  		span.innerHTML = "";
  else //alert("An unknown error occurred.");
  
  		span.innerHTML = "<font color='red'>未知的系统错误发生!</font>";
}
function en_handleErrors(){
  var span = document.getElementById("error");
	//myform.error.parentNode.appendChild(span); 
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
    	span.innerHTML = "<font color='red'>No corresponding geographic location could be found for one of the specified addresses. <br>This may be due to the fact that the address is relatively new, or it may be incorrect! </font>";
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
 		span.innerHTML = "<font color='red'>A geocoding or directions request could not be successfully processed,<br> yet the exact reason for the failure is not known!</font>";	
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>The HTTP q parameter was either missing or had no value. For geocoder requests,<br> this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input!</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    //alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>The given key is either invalid or does not match the domain for which it was given!</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    //alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>Adress can not be null!</font>";
  else if (gdir.getStatus().code == G_GEO_SUCCESS)
  		span.innerHTML = "";
  else //alert("An unknown error occurred.");
  
  		span.innerHTML = "<font color='red'>An unknown error occurred!</font>";
}
function tw_handleErrors(){
  var span = document.getElementById("error");
	//myform.error.parentNode.appendChild(span); 
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
    	span.innerHTML = "<font color='red'>沒有相應的地理位置，能夠找到一個指定的位址。 <br>這可能是由於這樣一個事實，即位址是相對較新的，也可能是不正確的！</font>";
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
 		span.innerHTML = "<font color='red'>無法成功處理位址解析或行車路線請求，<br>但是確切的失敗原因未知!</font>";	
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>HTTP q 參數缺失或沒有值。對於位址解析請求，這意味著將空位址指定為輸入.<br> 對於行車路線請求，這意味著在輸入中未指定查詢。</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    //alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>您輸入的位址無效或者找不到與你給定的位址相匹配的地區！</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    //alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>位址不能為空!</font>";
  else if (gdir.getStatus().code == G_GEO_SUCCESS)
  		span.innerHTML = "";
  else //alert("An unknown error occurred.");
  
  		span.innerHTML = "<font color='red'>未知的系統錯誤發生!</font>";
}
function vi_handleErrors(){
  var span = document.getElementById("error");
	//myform.error.parentNode.appendChild(span); 
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
    	span.innerHTML = "<font color='red'>Không có vị trí địa lý tương ứng, có thể tìm thấy một địa chỉ được xem. <br>Điều này có thể do thực tế là các địa chỉ là tương đối mới, nó có lẽ là không đúng!</font>";
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
 		span.innerHTML = "<font color='red'>Không thể thành công đối phó với địa chỉ giải quyết hoặc yêu cầu tuyến đường giao thông,<br>Tuy nhiên, chính xác nguyên nhân gây ra những sai lầm của các nhà chưa biết!</font>";	
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>HTTP l tham số là thiếu hoặc không có giá trị. Địa chỉ giải quyết yêu cầu, điều đó có nghĩa là không gian địa chỉ được xem như là các dữ liệu vào.<br>Yêu cầu cho các tuyến đường giao thông, điều đó có nghĩa là không được xác định trong đầu vào truy vấn.</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    //alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>Bạn đã gõ địa chỉ không hợp lệ hoặc không thể tìm thấy và đưa cho bạn địa chỉ đặt để phù hợp với khu vực!</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    //alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>Địa chỉ không nên không có sản phẩm nào!</font>";
  else if (gdir.getStatus().code == G_GEO_SUCCESS)
  		span.innerHTML = "";
  else //alert("An unknown error occurred.");
  
  		span.innerHTML = "<font color='red'>Không biết lỗi hệ thống đã xảy ra!</font>";
}
function ko_handleErrors(){
  var span = document.getElementById("error");
	//myform.error.parentNode.appendChild(span); 
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
    	span.innerHTML = "<font color='red'>아니 해당 지리적 위치, 지정된 주소를 찾을 수있게됩니다. <br>올바르지 않은 사실이 있으며 그 주소는 비교적 새로운입니다으로 인해 발생할 수있습니다, 아마!</font>";
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
 		span.innerHTML = "<font color='red'>수 주소 확인이나 트래픽 경로를 요청 안을 성공적으로 처리,<br> 그러나 미지의 실패의 정확한 원인!</font>";	
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>q 매개 변수는 HTTP 또는 아무런 가치가없습니다. 는 그 주소 공간의 입력으로 지정 의미의 주소 확인을 요청했다.<br> 즉, 입력 쿼리에 지정되어 있지 않으면 의미 트래픽 경로에 대한 요청.</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    //alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>당신이 잘못되었거나을 찾을 수없습니다 당신을주는 지역의 주소와 일치하도록 설정 주소를 입력!</font>";
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    //alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  		span.innerHTML = "<font color='red'>주소가 비어있을 수가 없죠!</font>";
  else if (gdir.getStatus().code == G_GEO_SUCCESS)
  		span.innerHTML = "";
  else //alert("An unknown error occurred.");
  
  		span.innerHTML = "<font color='red'>알 수없는 시스템 오류가 생겼어요!</font>";
}

function onGDirectionsAddOverlay(){ 
  for (var i=0; i<newMarkers.length; i++){
    map.removeOverlay(newMarkers[i]);
  }

  for (var i=0; i<=gdir.getNumRoutes(); i++){
    var originalMarker = gdir.getMarker(i);
    latLngs[i] = originalMarker.getLatLng();
    icons[i] = originalMarker.getIcon();
    newMarkers[i] = new GMarker(latLngs[i],{icon:icons[i], draggable:true, title:'Draggable'});
    map.addOverlay(newMarkers[i]);

    GEvent.addListener(newMarkers[i], "dragend", function(){
      var points = [];
      for (var i=0; i<newMarkers.length; i++){
        points[i]= newMarkers[i].getLatLng();
      }
      gdir.loadFromWaypoints(points);
    });

    copyClick(newMarkers[i],originalMarker);
    map.removeOverlay(originalMarker);
  }

  function copyClick(newMarker,oldMarker){
    GEvent.addListener(newMarker, 'click', function(){
      GEvent.trigger(oldMarker,'click');
    });
  }
}

