var geocoder;
var map;
var marker;

function initialize() {
	document.getElementById("map_canvas").style.display="block";
	geocoder = new google.maps.Geocoder();
	var latlng = new google.maps.LatLng(25.059604, 121.545394);
	var myOptions = {
		zoom: 6,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

function codeAddress() {
	document.getElementById("settingmsg").innerHTML="<img src='/images/ajax-loader.gif' /> 出生地經緯度搜尋中...";
	document.getElementById("settingmsg").style.display="block";
	var address = document.getElementById("address").value;
	var country = document.getElementById("country").value;
	address = address.replace(/^\s*|\s*$/g,"");
	country = country.replace(/^\s*|\s*$/g,"");
	if(address!="" && country!="") {
		initialize();
		geocoder.geocode( { 'address': country + ' ' + address, 'language':'en'}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				document.getElementById("mapzone").style.display="none";
				var lat = results[0].geometry.location.lat();
				var lng = results[0].geometry.location.lng();
				var url = "getTimezone.jsp?lat="+lat+"&lng="+lng;

				$.getJSON(url,function(resultData){
					var timezone=document.getElementById("timezone");
					var offset=resultData.rawOffset*(-60);
					for(var i=0; i<timezone.options.length; i++) {
						if(timezone.options[i].value==offset) {
							timezone.options[i].selected=true;
							break;
						}
					}
					setLocation(lat,lng);
					document.getElementById("settingmsg").innerHTML="出生地設定成功！若地圖標點不正確，請<a href=\"javascript:resetBirthPlace()\">重新輸入</a>其它更精確的地名試試看";
					document.getElementById("settingmsg").style.display="block";
				});

				map.setCenter(results[0].geometry.location);
				document.getElementById("formatted_address").value = results[0].formatted_address;
				if (marker) {
					marker.setMap(null);
				}
				marker = new google.maps.Marker({
					map: map, 
					position: results[0].geometry.location
				});
				
			} else {
				document.getElementById("map_canvas").style.display="none";
				document.getElementById("settingmsg").innerHTML="星盤小精靈找不到你輸入的地名，請<a href=\"javascript:resetBirthPlace()\">重新輸入</a>其它較靠近你出生地的城鎮試試看！";
				document.getElementById("settingmsg").style.display="block";
			}
		});
	} else {
		document.getElementById("settingmsg").innerHTML="你忘記輸入出生國家或城鎮了！請<a href=\"javascript:resetBirthPlace()\">重新輸入</a>，謝謝！";
		document.getElementById("settingmsg").style.display="block";
	}
}

function setLocation(lat,lng) {
	// set latitude
	if(lat>=0) {
		var latitude=document.getElementById("latitude");
		for(var i=0; i<latitude.options.length; i++) {
			if(latitude.options[i].value=="N"){
				latitude.options[i].selected=true;
				break;
			}
		}
	} else {
		var latitude=document.getElementById("latitude");
		for(var i=0; i<latitude.options.length; i++) {
			if(latitude.options[i].value=="S") {
				latitude.options[i].selected=true;
				break;
			}
		}
	}
	lat=Math.abs(lat);
	var d=parseInt(lat);
	document.getElementById("latitudeDegree").value=d;
	var m=parseInt((lat-d)*60);
	var latitudeMinute=document.getElementById("latitudeMinute");
	for(var i=0; i<latitudeMinute.options.length; i++) {
		if(latitudeMinute.options[i].value==m){
			latitudeMinute.options[i].selected=true;
			break;
		}
	}
	// set longitude
	if(lng>=0) {
		var longitude=document.getElementById("longitude");
		for(var i=0; i<longitude.options.length; i++) {
			if(longitude.options[i].value=="E") {
				longitude.options[i].selected=true;
				break;
			}
		}
	} else {
		var longitude=document.getElementById("longitude");
		for(var i=0; i<longitude.options.length; i++) {
			if(longitude.options[i].value=="W") {
				longitude.options[i].selected=true;
				break;
			}
		}
	}
	lng=Math.abs(lng);
	d = parseInt(lng);
	document.getElementById("longitudeDegree").value=d;
	m = parseInt((lng-d)*60);
	var longitudeMinute=document.getElementById("longitudeMinute");
	for(var i=0; i<longitudeMinute.options.length; i++) {
		if(longitudeMinute.options[i].value==m) {
			longitudeMinute.options[i].selected=true;
			break;
		}
	}
}

function showMapZone() {
	document.getElementById("citymenu").style.display="none";
	document.getElementById("submenu2").style.display="block";
	document.getElementById("mapzone").style.display="block";
	document.getElementById("settingmsg").style.display="none";
	document.getElementById("map_canvas").style.display="none";
	document.getElementById("submenu3").style.display="none";
	document.getElementById("detailplace").style.display="none";
}

function showCityMenu() {
	document.getElementById("settingmsg").style.display="none";
	document.getElementById("map_canvas").style.display="none";
	document.getElementById("mapzone").style.display="none";
	document.getElementById("detailplace").style.display="none";
	document.getElementById("submenu2").style.display="none";
	document.getElementById("submenu3").style.display="none";
	document.getElementById("citymenu").style.display="block";
	document.getElementById("country").value="";
	document.getElementById("address").value="";
	setValue();
}

function showDetailPlace() {
	document.getElementById("citymenu").style.display="none";
	document.getElementById("settingmsg").style.display="none";
	document.getElementById("map_canvas").style.display="none";
	document.getElementById("mapzone").style.display="none";
	document.getElementById("submenu2").style.display="none";
	document.getElementById("submenu3").style.display="block";
	document.getElementById("detailplace").style.display="block";
}

function resetBirthPlace() {
	document.getElementById("settingmsg").style.display="none";
	document.getElementById("map_canvas").style.display="none";
	document.getElementById("mapzone").style.display="block";
	document.getElementById("country").value="";
	document.getElementById("address").value="";
	document.getElementById("country").focus();
}

function checkYear() { 
	re = /^\d{1,4}$/; 
	if (!(re.test(document.form1.year.value) && (0 <= document.form1.year.value && document.form1.year.value < 5399))) 
		alert("年代格式不正確！請輸入西元出生年，例如 1988"); 
	else
		return true;
}

function checkLongitudeDegree() { 
	re = /^\d{1,3}$/; 
	if (!(re.test(document.form1.longitudeDegree.value) && (0 <= document.form1.longitudeDegree.value && document.form1.longitudeDegree.value < 180)))
		alert("經度格式不正確！請重新輸入（經度範圍介於0~179）"); 
	else
		return true;
}

function checkLatitudeDegree() { 
	re = /^\d{1,3}$/; 
	if (!(re.test(document.form1.latitudeDegree.value) && (0 <= document.form1.latitudeDegree.value && document.form1.latitudeDegree.value < 90)))
		alert("緯度格式不正確！請重新輸入（緯度範圍介於0~89）"); 
	else
		return true;
}

function checkHoroscopeForm() {
	if(checkLongitudeDegree() && checkLatitudeDegree() && checkYear()) {
		return true;
	} else {
		return false;
	}
}
