var map = null;
var geocoder = null;
//////////////////////////////////////////////
function initialize(target) {
	if (map == null) {
		if (GBrowserIsCompatible()) {
			if (target == null) target = "map";
			geocoder = new GClientGeocoder();
			map = new GMap2(document.getElementById(target));
			map.addControl(new GSmallMapControl());
		}
	}
}

function getArea() {
	if (document.getElementById("area3") != null)
		return document.getElementById("area3").innerHTML;
	if (document.getElementById("area2") != null)
		return document.getElementById("area2").innerHTML;
	else
		return document.getElementById("area1").innerHTML;
}

function showAddress(point) {
	if (!point) {
		var addr = getArea();
		geocoder.getLatLng(addr, function(point){if(point)createMarker(point);}, 5);
	}
	else
		createMarker(point);
}
function createMarker(point, dlgId) { 
	map.clearOverlays();
	var marker = new GMarker(point);
	map.addOverlay(marker);
	map.setCenter(point, 13);
	if (dlgId > "")
		dijit.byId("mapSetting").show();
} 
////////////////////////////////////////////////////
var addrList = null;
var searching = null;
var frmId, entity;

function getPlaceList(response) {
	if (!response || response.Status.code != 200) {
		alert("对不起，找不到这个地址的资料");
	} else {
		addrList = new Array();
		var returnPlaces = response.Placemark.length;
		if (returnPlaces > 1) {
			var html = "";
			for (var i = 0; i < returnPlaces; i ++) {
				addrList[i] = getGeoCoderInfo(response.Placemark[i]);
				html += "<div><a href='javascript:" + (searching==null?"select":"locate") + 
					"Place(" + i + ")'>" + addrList[i]["address"] + "</a></div>";
            }
            document.getElementById("locate").innerHTML = html;
            dijit.byId("locSelect").show();
        }
        else {
            addrList[0] = getGeoCoderInfo(response.Placemark[0]);
            if (searching == null)
                selectPlace(0);
            else
                locatePlace(0);
        }
    }
}

function getGeoCoderInfo(place) {
    var info = new Array();
    info["address"] = place.address;
    try {
        info["postalCode"] = place.AddressDetails.Country.AdministrativeArea.Locality.PostalCode.PostalCodeNumber;
    }
    catch(e) {
        info["postalCode"] = "";
    }
    info["lat"] = place.Point.coordinates[1];
    info["lng"] = place.Point.coordinates[0];
    
    return info;
}
//////////////////////////////////////////////////////
function markMap() {
	initialize();
	addToMap();
}
//////////////////////////////////////////////////////
function setMapInfo(lat, lng, addr) {
	var frm = document.forms[frmId];
	frm[entity + ".lat"].value = lat; 
	frm[entity + ".lng"].value = lng;
	if (addr > '')
		frm[entity + ".mapAddress"].value = addr;
}

function selectPlace(num) {
    dijit.byId("locSelect").hide();
    setMapInfo(addrList[num]["lat"], addrList[num]["lng"], addrList[num]["address"]);
	addToMap();
}

function addToMap() {
	var frm = document.forms[frmId];
	var lat = parseFloat(frm[entity + ".lat"].value); 
	var lng = parseFloat(frm[entity + ".lng"].value); 
	if (lat != 0 || lat != 0) {
		createMarker(new GLatLng(lat, lng), "mapSetting");
	}
	else {
		var addr = frm[entity + ".mapAddress"].value;
		if (addr == "") addr = frm[entity + ".address"].value;
		if (addr > "") {
//			var area = frm[entity + ".areaId3"];
//			addr += " " + area.options[area.selectedIndex].text;
			geocoder.getLocations(addr, getPlaceList);
		}
		else
			alert("请输入地址或邮编");
	}
}
