function PhotoLayerCallback(json, photoLayer) { this.photoLayer = photoLayer; var photos = this.getPhotos(json); if (!photos) return; var batch = []; for (var i = 0; i < photos.length; i++) { var photo = photos[i]; if (!photoLayer.ids[this.getId(photo)]) { var marker = this.createMarker(photo, photoLayer.markerIcon); var fixedAmount = 2; if (photoLayer.map.getZoom() > 14) fixedAmount = 4; var latlngHash = (marker.latlng.lat().toFixed(fixedAmount) + "" + marker.latlng.lng().toFixed(fixedAmount)); latlngHash = latlngHash.replace(".","").replace(".", "").replace("-",""); if (!photoLayer.seenLatLngs[latlngHash]) { photoLayer.seenLatLngs[latlngHash] = true; photoLayer.ids[this.getId(photo)] = "exists"; batch.push(marker); photoLayer.mgr.addMarker(marker, photoLayer.map.getZoom()); } } } } PhotoLayerCallback.prototype.getPhotos = function(json) { return (json.feed && json.feed.entry) || (json.photos && json.photos.photo); } PhotoLayerCallback.prototype.getLogo = function(photo) { if (photo.id && photo.id.$t) { return "https://www.google.com/accounts/lh2/picasaweblogo-en.gif"; } else { return "http://l.yimg.com/g/images/flickr_logo_gamma.gif.v59209.14"; } } PhotoLayerCallback.prototype.getId = function(photo) { return (photo.id && photo.id.$t) || (photo.id); } PhotoLayerCallback.prototype.getTitle = function(photo) { return (photo.title && photo.title.$t) || (photo.title); } PhotoLayerCallback.prototype.getThumbnailUrl = function(photo) { return (photo.media$group && photo.media$group.media$thumbnail[0].url) || ("http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_" + "s.jpg"); } PhotoLayerCallback.prototype.getImageUrl = function(photo) { return (photo.media$group && photo.media$group.media$thumbnail[2].url) || ("http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_" + "m.jpg"); } PhotoLayerCallback.prototype.getLatLng = function(photo) { if (photo.georss$where) { var pos = photo.georss$where.gml$Point.gml$pos.$t; var lat = parseFloat(pos.split(" ")[0]); var lng = parseFloat(pos.split(" ")[1]); } else { var lat = parseFloat(photo.latitude); var lng = parseFloat(photo.longitude); } return new GLatLng(lat, lng); } PhotoLayerCallback.prototype.getDescription = function(photo) { return (photo.summary && photo.summary.$t) || ""; } PhotoLayerCallback.prototype.getAuthor = function(photo) { return (photo.author && photo.author[0] && photo.author[0].name.$t) || photo.ownername; } PhotoLayerCallback.prototype.getLink = function(photo) { return (photo.link && photo.link[1] && photo.link[1].href) || ("http://www.flickr.com/photos/" + photo.owner + "/" + photo.id); } PhotoLayerCallback.prototype.createMarker = function(photo, baseIcon) { var me = this; var title = this.getTitle(photo); var description = this.getDescription(photo); var author = this.getAuthor(photo); var link = this.getLink(photo); var thumbnailUrl = this.getThumbnailUrl(photo); var imageUrl = this.getImageUrl(photo); var markerIcon = new GIcon(baseIcon); markerIcon.image = thumbnailUrl; var marker = new MarkerLight(this.getLatLng(photo), {image: thumbnailUrl, title: title }); if (title > 33) { title = title.substring(0, 33) + "…"; } var html = "