window.onload = initialize;
var useConsole = false;
var map;
var idHash = new Object();
var initialLocation;
var tokyo = new google.maps.LatLng(35.68171868938779, 139.7672186817169);
var siberia = new google.maps.LatLng(60, 105);
var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
var startLatLng = tokyo;
var browserSupportFlag =  new Boolean();
var count = 3;
var initFlag = false;

if (latitude  && longitude) {
	startLatLng = new google.maps.LatLng(latitude,longitude);
}

function initialize() {
  	var myOptions = {
  	zoom: 15,
	center: startLatLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	if (!latitude && !longitude) {
		setCurrentPlace();
	}
	setInterval(update,1000);
}

function setCurrentPlace() {
	google.maps.event.addListener(map, 'dragend', function(event) {
		count = 1;
		//console("dragend : " + map.getCenter().lat() + ", " + map.getCenter().lng());
	});
	google.maps.event.addListener(map, 'zoom_changed', function(event) {
		count = 1;
		//console("zoom_changed : " + map.getCenter().lat() + ", " + map.getCenter().lng() + " zoom : " + map.getZoom());
	});
	
  // Try W3C Geolocation (Preferred)
  if(navigator.geolocation) {
    browserSupportFlag = true;
    navigator.geolocation.getCurrentPosition(function(position) {
      initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
      map.setCenter(initialLocation);
    }, function() {
      handleNoGeolocation(browserSupportFlag);
    });
  // Try Google Gears Geolocation
  } else if (google.gears) {
    browserSupportFlag = true;
    var geo = google.gears.factory.create('beta.geolocation');
    geo.getCurrentPosition(function(position) {
      initialLocation = new google.maps.LatLng(position.latitude,position.longitude);
      map.setCenter(initialLocation);
    }, function() {
      handleNoGeoLocation(browserSupportFlag);
    });
  // Browser doesn't support Geolocation
  } else {
    browserSupportFlag = false;
    handleNoGeolocation(browserSupportFlag);
  }
  
  function handleNoGeolocation(errorFlag) {
    if (errorFlag == true) {
      alert("Geolocation service failed.");
      initialLocation = newyork;
    } else {
      alert("Your browser doesn't support geolocation. We've placed you in Tokyo.");
      initialLocation = tokyo;
    }
    map.setCenter(initialLocation);
  }
}



/*

function initialize() {
	var latlng = new google.maps.LatLng(35.68171868938779, 139.7672186817169);
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	h_locationClick(latlng);
}
  
  
*/

function h_locationClick(location) {
	console("location : " + location.lat() + ", " + location.lng());
} 

function console(str, del) {
	if (!useConsole) { return }
	var cl = document.getElementById("console");
	if (del) {
		while ( cl.firstChild ) { 
       		cl.removeChild( cl.lastChild );
    	}
	}
	
	var block = document.createElement('div');
	var text = document.createTextNode( str );
	cl.appendChild(block);
	block.appendChild(text);
}

function setImg(latlng, src, href) {
	//console(latlng.lat() + " - " + latlng.lng() + " - " + src);
	icon = new google.maps.MarkerImage(src, new google.maps.Size(40,40), new google.maps.Point(0,0), new google.maps.Point(20,20), new google.maps.Size(40,40));
	var options = {
		icon: icon,
		position: latlng,
		map: map
	}
	var marker = new google.maps.Marker(options);
	google.maps.event.addListener(marker, 'click', function(event) {window.open(href)});
}


function update() {
	//console(count);
	count --;
	if (count <= 0 || !initFlag) {
		count = 10;
		if (map.getBounds()) {
			initFlag = true;
			var bound = map.getBounds();
			var ne = bound.getNorthEast();
			var sw = bound.getSouthWest();
			var ce = new google.maps.LatLng(ne.lat() + (sw.lat() - ne.lat()) * Math.random(), ne.lng() + (sw.lng() - ne.lng()) * Math.random());
			console(ce.lat() + " - " + ce.lng());
			search(ce, map.getZoom());
		}
	}
}
		


function search(location, zoom) {
	
	if (zoom < 10 ) { return }
	var radius = Math.max(1, 36 - zoom * 2);
	var url = "imageList.php?lat=" + location.lat() + "&lon=" + location.lng() + "&radius=" + radius;
	var script  = document.createElement( 'script' );
    script.type = 'text/javascript';
    script.src  = url;
    document.body.appendChild( script );
	console('search * ' + url );
} 


function callback(obj) {
	console('search result : ' + obj.length + ' items');
	for( var i=0; i<obj.length; i++ ) {
        var photo = obj[i];
		if (!idHash[photo.id]) {
			setImg(new google.maps.LatLng(photo.lat,photo.lon), photo.src, photo.link);
			idHash[photo.id] = true;
		}
	}
	count -= 8;
}

