function SpreadsheetsLayerCallback(json, panoLayer) {
var bounds = new GLatLngBounds();
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
if(entry["gsx$" + panoLayer.options.column_lat]) {
var lat = parseFloat(this.getColumnVal(entry, panoLayer.options.column_lat));
var lng = parseFloat(this.getColumnVal(entry, panoLayer.options.column_lng));
var point = new GLatLng(lat, lng);
var div = document.createElement('div');
div.style.fontSize = '12px';
div.style.textAlign = 'center';
div.innerHTML += '' + this.getColumnVal(entry, panoLayer.options.column_title) + '
';
var link = document.createElement('a');
link.style.textDecoration = 'underline';
link.style.cursor = 'pointer';
link.appendChild(document.createTextNode('Click to watch video'));
GEvent.addDomListener(link, "click", function() {
panoLayer.map.getInfoWindow().maximize();
});
div.appendChild(link);
var label = this.getColumnVal(entry, panoLayer.options.column_title);
var url = this.getColumnVal(entry, panoLayer.options.column_desc);
var marker = this.createMarker(panoLayer, point, label, div, url);
panoLayer.mgr.addMarker(marker, 0);
bounds.extend(point);
}
}
}
SpreadsheetsLayerCallback.prototype.getColumnVal = function(entry, columnName) {
var columnVal = '';
if (entry["gsx$" + columnName]) {
columnVal = entry["gsx$" + columnName].$t;
}
return columnVal;
}
SpreadsheetsLayerCallback.prototype.createMarker = function(panoLayer, point, label, div, url) {
var me = this;
var marker = new GMarker(point, {icon: panoLayer.markerIcon, title: label});
GEvent.addListener(marker, "click", function() {
marker.openInfoWindow("
");
var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };
swfobject.embedSWF(url + "&enablejsapi=1&playerapiid=ytplayer&autoplay=1",
"ytapiplayer", panoLayer.options.video_width, panoLayer.options.video_height, "8", null, null, params, atts);
});
return marker;
}
function SpreadsheetsLayer(map, userOptions) {
var me = this;
me.ids = {};
me.map = map;
me.options = {
key: 'p9pdwsai2hDM44qo4oZ5EfQ',
id: 'od6',
query: '',
video_width: '400px',
video_height: '300px',
column_title: "title",
column_desc: "description",
column_lat: "latitude",
column_lng: "longitude",
icon_color: "green"
};
for (optionName in userOptions) {
if (userOptions.hasOwnProperty(optionName)) {
me.options[optionName] = userOptions[optionName];
}
}
me.mgr = new MarkerManager(map, {maxZoom: 19});
var icon = new GIcon(G_DEFAULT_ICON);
icon.image = 'http://www.google.org/recharge/video.png';
icon.shadow = null;
icon.iconSize = new GSize(22, 21);
icon.shadowSize = new GSize(0, 0);
icon.iconAnchor = new GPoint(10, 10);
icon.infoWindowAnchor = new GPoint(9, 2);
icon.infoShadowAnchor = new GPoint(18, 15);
me.markerIcon = icon;
me.enabled = false;
}
SpreadsheetsLayer.prototype.enable = function() {
this.enabled = true;
this.load();
}
SpreadsheetsLayer.prototype.disable = function() {
this.enabled = false;
this.mgr.clearMarkers();
this.ids = {};
}
SpreadsheetsLayer.prototype.getEnabled = function() {
return this.enabled;
}
SpreadsheetsLayer.prototype.load = function() {
var me = this;
var uniqueID = "";
for (optionName in me.options) {
if (me.options.hasOwnProperty(optionName)) {
var optionVal = "" + me.options[optionName] + "";
uniqueID += optionVal.replace(/[^\w]+/g,"");
}
}
var callbackName = "SpreadsheetsLayerCallback.loader" + uniqueID;
eval(callbackName + " = function(json) { var pa = new SpreadsheetsLayerCallback(json, me);}");
var script = document.createElement('script');
script.setAttribute('src', 'http://spreadsheets.google.com/feeds/list'
+ '/' + me.options.key + '/' + me.options.id + '/public/values' +
'?alt=json-in-script&callback=' + callbackName + '&' + me.options.query);
script.setAttribute('type', 'text/javascript');
document.documentElement.firstChild.appendChild(script);
}