// Flickr画像検索を行う関数
function photo_search ( param ) {
	// APIリクエストパラメタの設定
	param.api_key  = 'c48ac4352dfd8e5d19581a1a7c2b0253';
	param.user_id  = '32760626@N05';
	param.method   = 'flickr.photos.search';
	param.sort     = 'date-taken-desc';
	param.extras   = 'geo,date_taken,owner_name';
	param.format   = 'json';
	param.has_geo  = '1';

	// APIリクエストURLの生成(GETメソッド)
	var url = 'http://www.flickr.com/services/rest/?'+
			  obj2query( param );

	// script 要素の発行
	var script  = document.createElement( 'script' );
	script.type = 'text/javascript';
	script.src  = url;
	document.body.appendChild( script );
}

// 現在の表示内容をクリアする
function remove_children ( id ) {
	var div = document.getElementById( id );
	while ( div.firstChild ) { 
	    div.removeChild( div.lastChild );
	}
}

// オブジェクトからクエリ文字列を生成する関数
function obj2query ( obj ) {
	var list = [];
	for( var key in obj ) {
		var k = encodeURIComponent(key);
		var v = encodeURIComponent(obj[key]);
		list[list.length] = k+'='+v;
	}
	var query = list.join( '&' );
	return query;
}

// Flickr検索終了後のコールバック関数
function initPositionMap ( obj ) {
	var photo = obj.photos.photo[0];
	if(photo.latitude>0){
		var lng = photo.longitude;
		var lat = photo.latitude;
		map.centerAndZoom(new GPoint(lng, lat), 11);
	}
}

// Flickr検索終了後のコールバック関数
// 取得した画像をGoogle Maps 上にプロット
function displayFlickrMarkerOnMap ( obj ) {
	map.clearOverlays();
	markerPoints = new Array();
	markerContents = new Array();

	// Each picture which is geotagged
	for(var i=0; i<obj.photos.photo.length; i++){
		var photo = obj.photos.photo[i];
		if(photo.latitude>0){
			// URL of photos. The format of URL is witten in http://www.flickr.com/services/api/misc.urls.html
			var str = "http://static.flickr.com/" + photo.server +"/"+ photo.id +"_"+ photo.secret + "_t.jpg";

			// Get parameters from JSON file and make points
			var point = new GLatLng(photo.latitude, photo.longitude);
			var title = photo.title;
			var owner = photo.ownername;
			var lng = photo.longitude;
			var lat = photo.latitude;
			var location_accuracy = photo.accuracy;
			var date = photo.datetaken;
			var id_url = "http://www.flickr.com/photos/32760626@N05/"+ photo.id +"/";

			// create markers points
			var marker = createMarker(point, i, title, date, str, lat, lng, id_url, location_accuracy, owner);
			// create sidebar contents
			map.addOverlay(marker);
		}
	}
}

// Google Maps 用のマーカーを生成
function createMarker(point, index, title, date, str, lat, lng, id_url, location_accuracy, owner) {
	markerPoints[index] = point;
	var marker = new GMarker(point, markerIcon);
	markers[index] = marker;
	var html = createMarkerContent(point, index, title, date, str, lat, lng, id_url, location_accuracy, owner);
	GEvent.addListener(marker, "click", function() {
	  marker.openInfoWindowHtml(html);
	});
	return marker;
}

// Google Maps 用の InfoWindow "ふきだし" を生成
function createMarkerContent(point, index, title, date, str, lat, lng, id_url, location_accuracy, owner) {
	var html = "<div style='width:250px;'><div class='popup_thumbnail' style='width:104px; float:left; background:#CCCCCC none repeat scroll 0%; padding: 1px'><a href='" + id_url + "' target='_blank' style='padding: 0px'><img src= '" + str + "' width='100px' height='60px'></a></div><div style='width:140px; float:right; font-size:11px;'><p style='margin:0px 0px 5px 0px; color:#444444; background:#E5E5E5; font-weight: bold;'>" + title + "</p><p>" + date + "<br \/>[<a href='javascript:zoomIn(" + lat + "," + lng + ", 15);'>zoom in<\/a>] [<a href='" + id_url + "' target='_blank'>flickr</a>]</p></div></div>";
	markerContents[index] = html;
	return html;
}

popupCSS();

// ふきだし用CSS
function popupCSS() {
	var src ='<' + 'style type=\"text/css\"' + '>' +
	'.popup_thumbnail img {' +
	'border:2px solid #FFFFFF;' +
	'}' +
	'.popup_thumbnail a:hover img {' +
	'border-color:#005BCB;' +
	'}' +
	'<'+'/style>';
	document.write(src);
}

// Google Maps 用 Zoom-in 関数
function zoomIn(latn, lonn, zoom) {
	if ( map.getZoom() < zoom ) { map.setCenter(new GLatLng(latn,lonn), zoom); }
	else { map.setCenter(new GLatLng(latn,lonn)); map.zoomIn(); }
}

