function PhotoLayerCallback(json, panoLayer) { this.panoLayer = panoLayer; var photos = this.getPhotos(json); if (!photos) return; var batch = []; for (var i = 0; i < photos.length; i++) { var photo = photos[i]; if (!panoLayer.ids[this.getId(photo)]) { var marker = this.createMarker(photo, panoLayer.markerIcon); panoLayer.ids[this.getId(photo)] = "exists"; batch.push(marker); } } panoLayer.mgr.addMarkers(batch, panoLayer.map.getZoom()); panoLayer.mgr.refresh(); } PhotoLayerCallback.prototype.getPhotos = function(json) { return (json.feed && json.feed.entry) || (json.photos && json.photos.photo); } 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 GMarker(this.getLatLng(photo), {icon: markerIcon, title: title}); if (title > 33) { title = title.substring(0, 33) + "…"; } var html = "