var map;
var lat;
var lng;
var marker;
var page = 1;

var photoIds = new Array();

const API_KEY = '2dfc6eff0ef4b59e9edc7c1d66f564eb';
const API_SECRET = 'f28a018f8a518755';

function setPhotoIds(res) {
    var doc = res.responseXML;
    if (!doc) return;
    var photos = doc.getElementsByTagName("photo");
    for (var i=0;i <photos.length; i++) {
	photoIds.push(photos[i].getAttribute("id"));
    }
    showEvent();
}

function getPhotoIds() {
    var url = '/glickr/flickr.photos.search.php';
    var params = {lat:lat, lng:lng, page:page++};
     new Ajax.Request (url, 
		       {method: 'get', 
			       parameters: params, 
			       onSuccess: setPhotoIds
			       });
}

function showOnePhoto(res) {
    try {
	_showOnePhoto(res);
    } catch (e) {alert(e);}
}

function _showOnePhoto(res) {
    var doc = res.responseXML;
    if (!doc) return;
    var photo = doc.getElementsByTagName("photo")[0];
    var id = photo.getAttribute("id");
    var secret = photo.getAttribute("secret");
    var server = photo.getAttribute("server");
    var description = doc.getElementsByTagName("description")[0];
    var title = description && description.firstChild ? description.firstChild.nodeValue : "";
    var owner = doc.getElementsByTagName("owner")[0];
    var name = owner ? owner.getAttribute("username") : null;
    var loc = doc.getElementsByTagName("location")[0];
    var latitude = loc.getAttribute('latitude');
    var longitude = loc.getAttribute('longitude');

    if (marker) {
	map.removeOverlay(marker);
    }

    var point = new GLatLng(latitude,longitude);
    map.panTo(point);
    marker = new GMarker(point);
    map.addOverlay(marker);
    var html = '';
    html += '<div id="mainInfoDiv" style="height:250; width:250; padding: 2px; font-family:arial; ">';
    var src = imageURL(id,secret,server,'m');
    html += "<img src=\"" + src + "\" />";
    if (title) {
	html += "<br/>";
	html += title;
    }
    if (name) {
	html += "<br/>";
	html += "<em>by " + name + "</em>";
    }
    html += "</div>";
    marker.openInfoWindowHtml(html);

    setTimeout("showEvent()",10000);
}

function imageURL(id,secret,server,kind) {
    //
    // http://www.flickr.com/services/api/misc.urls.html
    //
    var s = 'http://static.flickr.com/' + server + '/' + id + '_' + secret;
    if (kind && kind != '-') s += '_' + kind;
    s += '.jpg';			
    return s;
}

function getOnePhoto() {
    var id = photoIds.pop();
    var idx = Math.floor(Math.random()*photoIds.length);
    var id = photoIds[idx];
    photoIds.splice(idx,1);
    var url = '/glickr/flickr.photos.getInfo.php';
    var params = {photo_id:id};
    new Ajax.Request (url, 
		      {method: 'get', 
			      parameters: params, 
			      onSuccess: showOnePhoto
			      });
}

function showEvent() {
    if (photoIds.length == 0) {
	getPhotoIds();
    } else {
	getOnePhoto();
    }
}

function showLocation(pos) {
    if (lat || lng) return;
    var c = pos.coords;
    lat = c.latitude;
    lng = c.longitude;
    map.setCenter(new GLatLng(lat,lng),13);
    showEvent();
}

function errorLocation(error) {
    //alert('errorLocation: ' + error.code + ":" + error.message);
}

function onLoad() {
    map = new GMap2(document.getElementById("map"));
    
    map.setUIToDefault();
    
    var geo = navigator.geolocation;
    if (geo) {
	geo.getCurrentPosition(showLocation,
			       errorLocation,
			       {enableHighAccuracy:true, maximumAge:600000});
    } else {
	alert("Couldn't create geolocation");
    }
}
