/// <reference path="gmap_main.js" />
/// <reference path="jquery-1.7.1.min.js" />

//function detectBrowser() {
//	var useragent = navigator.userAgent;
//	var mapdiv = document.getElementById("map_canvas");

//	$("top").innerHTML = useragent;

//	if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('Android') != -1) {
//		mapdiv.style.width = '100%';
//		mapdiv.style.height = '100%';
//	} else {
//		mapdiv.style.width = '600px';
//		mapdiv.style.height = '800px';
//	}
//}

function initialize() {

	latlng = new google.maps.LatLng(37.5854405200574, 126.97682360);

	iCnt = 0;
	failCnt = 0;
	successCnt = 0;

	gmap = new google.maps.Map(document.getElementById("divMap"), {
		zoom : 16,
		center: latlng,
		mapTypeId : google.maps.MapTypeId.ROADMAP
	});

	geocoder = new google.maps.Geocoder();

	marker = new google.maps.Marker({
		position : latlng,
		map : gmap,
		icon : "http://maps.google.com/mapfiles/arrow.png",
		title : "나의 현재 장소"
	});

	if (!PosReceived) {
	    navigator.geolocation.getCurrentPosition(GCPCallback, errorCallbackGCP, {
	        enableHighAccuracy: true,
	        maximumAge: 3000,
	        timeout: 3000
	    });
	}

	if (navigator.geolocation == undefined) {
	    alert("이 브라우져는 HTML5를 지원하지 않습니다. 일부 기능에 제한이 있습니다.");
	    google.maps.event.addListener(gmap, 'click', function (event) {
	        placeMarker_NG(event.latLng);
	        MM_showHideLayers('apDiv2', '', 'hide');
	        disableWatch();
	    });
	    return;
	}

    //if (PosReceived) { alert("undefined"); }
	// $("a").click(function (event) {
	// event.preventDefault();
	// $(this).hide("slow");
	// //alert("As you can see, the link no longer took you to jquery.com");
	// });
	// detectBrowser();

	google.maps.event.addListener(gmap, 'click', function (event) {
	    placeMarker_NG(event.latLng);
	    MM_showHideLayers('apDiv2', '', 'hide');
	    disableWatch();
	});

	accuracy = 9999;
}

function placeMarker(location) {
    marker.setPosition(location);
    latlng = location;
    var la = location.lat().toString();
    var ln = location.lng().toString();

    gmap.setCenter(location);
    geocoder.geocode({
        'latLng': marker.getPosition()
    }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                $('#addr').html(results[0].formatted_address);
                $('#coord').html(la.substr(0, 12) + ", " + ln.substr(0, 12));
                $('#accuracy').html("");
            }
        }
    });
}

function placeMarker_NG(location) {
    marker.setPosition(location);
    latlng = location;
    var la = location.lat().toString();
    var ln = location.lng().toString();

    gmap.setCenter(location);
    geocoder.geocode({
        'latLng': marker.getPosition()
    }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                $('#addr').html(results[0].formatted_address);
                $('#coord').html(la.substr(0, 12) + ", " + ln.substr(0, 12));
                $('#accuracy').html(accuracy + "m");
            }
        }
    });
}

function genkey(position) {
	var Location = new google.maps.LatLng(position);

	$.ajax({
		url : "genkey.php",
		type : "GET",
		context : document.body,

		data: "lat=" + latlng.lat() + "&lng=" + latlng.lng(),
		dataType : "json",
		success : function(data) {
			addClass(data);
			// $(this).addClass(data);
		}
	});
}

function addClass(msg) {
	// alert(msg.uid);
	$('#url').html("http://amap.kr/?" + msg.uid);
}

$(document).ready(function() {
	initialize();
});

function disableWatch() {
	navigator.geolocation.clearWatch(watchId);

//	$("#bottom").val = "clearWatch";
}

function GCPCallback(position) {
	var la = position.coords.latitude;
	var lo = position.coords.longitude;

	latlng = new google.maps.LatLng(la, lo);
	accuracy = position.coords.accuracy;
	placeMarker(latlng);

//	$("#accuracy").html(position.coords.accuracy + "m");

//	$("#top").val = "GCP OK" + 
    iCnt++;
//	 $("bottom").innerHTML = ". 위도 : " + la.substr(0,4) + " / 경도 : " + lo + " / 정확도 : "
//	 + position.coords.accuracy + "m";

	 watchId = navigator.geolocation.watchPosition(successCallback,
	 errorCallback, {
	 enableHighAccuracy : true,
	 maximumAge : 5000,
	 timeout : 5000
	 });

}

function successCallback(position) {
	if (position.coords.accuracy == 0)
		return;
	var la = position.coords.latitude;
	var lo = position.coords.longitude;

	latlng = new google.maps.LatLng(la, lo);
//	marker.setPosition(latlng);
//	gmap.setCenter(latlng);

	accuracy = position.coords.accuracy;
	placeMarker(latlng);

	// disableWatch();

//	$("MyCoord").innerHTML += "위도 : " + la + " / 경도 : " + lo + " / 정확도 : "
//			+ position.coords.accuracy + "m";
	//	$("bottom").innerHTML = "successCallback" + 

    successCnt++;

	if (position.coords.accuracy < 100 && position.coords.accuracy > 0) {
		disableWatch();
		successCnt = 0;
	}

	if (successCnt > 10) {
		disableWatch();
		successCnt = 0;
		if (position.coords.accuracy > 100 || position.coords.accuracy == 0) {
			alert("오차 대박");
		}
	}
}

function errorCallbackGCP(error) {
	switch (error.code) {
	case error.TIMEOUT:
		// Quick fallback when no suitable cached position exists.

		// Acquire a new position object.
		// navigator.geolocation.getCurrentPosition(successCallback,
		// errorCallback);
//	    $("top").innerHTML = "GCP TIMEOUT Error" + 
        failCnt++;
		break;

	default:
//	    $("top").innerHTML = "GCP default Error" + 
        failCnt++;
		break;

	}
	;

	watchId = navigator.geolocation.watchPosition(successCallback,
			errorCallback, {
				enableHighAccuracy : true,
				maximumAge : 5000,
				timeout : 5000
			});

}

function errorCallback(error) {
	// alert(error.toString())
	// $("bottom").innerHTML = "Error" + failCnt++;
	if (failCnt > 10) {
		alert("GPS 수신이 원활하지 않습니다.");
//		$("bottom").innerHTML = "Error" + 
        failCnt++;
		disableWatch();
		failCnt = 0;
	}

	switch (error.code) {
	case error.TIMEOUT:
		// navigator.geolocation.getCurrentPosition(successCallback,
		// errorCallback);
//	    $("bottom").innerHTML = "TIMEOUT Error" + 
        failCnt++;
		break;

	default:
//	    $("bottom").innerHTML = "default Error" + 
        failCnt++;
		break;

	}
	;
}

function EnableGPS() {
	watchId = navigator.geolocation.watchPosition(successCallback,
			errorCallback, {
				enableHighAccuracy : true,
				maximumAge : 5000,
				timeout : 5000
			});
	iCnt = 0;
	failCnt = 0;
	successCnt = 0;

}

